使用 awk 以模式读取文件

发布于 2024-09-09 03:20:52 字数 414 浏览 15 评论 0原文

我有一个以下方式的输入文件

<td> Name1 </td>
<td> <span class="test"><a href="url1">Link </a></span></td>
<td> Name2 </td>
<td> <span class="test"><a href="url2">Link </a></span></td>

我想要一个 awk 脚本来读取该文件并以以下方式输出

url1 Name1
url2 Name2

任何人都可以帮我解决这个看似琐碎的问题吗?谢谢。

I have an input file in following manner

<td> Name1 </td>
<td> <span class="test"><a href="url1">Link </a></span></td>
<td> Name2 </td>
<td> <span class="test"><a href="url2">Link </a></span></td>

I want a awk script to read this file and output in following manner

url1 Name1
url2 Name2

Can anyone help me out in this trivial looking problem? Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

尐籹人 2024-09-16 03:20:52

为每个提取一个 href 相对简单,只要它们符合 XHTML 标准,并且一行中最多只有一个,并且您不关心封闭标签,但 perl 更容易:

$ perl -ne 'print "$1\n" if /href="([^"]+)"/'

如果您关心封闭标签或者它们不符合标准,则无法使用正则表达式来解析 HTML。这是不可能的。

补充:哎呀,你确实关心上下文,忘记正则表达式并使用真正的 HTML 解析器

Extracting one href per is relatively simple, so long as they conform to XHTML standards and there is only at most one on a line and you don't care about enclosing tags, but perl is easier:

$ perl -ne 'print "$1\n" if /href="([^"]+)"/'

If you care about enclosing tags or they are not standard conformant, you cannot use regular expressions to parse HTML. It is impossible.

added: oops, you do care about context, forget about regexps and use a real HTML parser

吃→可爱长大的 2024-09-16 03:20:52

这是一个可以完成这项工作的 awk 脚本

awk '
/a href=\".*\"/ { sub( /^.*a href=\"/,"" ); sub(/\".*/,"");  print $0, name }
                { name = $2 }
'

Here is an awk script that does the job

awk '
/a href=\".*\"/ { sub( /^.*a href=\"/,"" ); sub(/\".*/,"");  print $0, name }
                { name = $2 }
'
谜兔 2024-09-16 03:20:52

这可能有效:

awk 'BEGIN
     {i=1}{line[i++]=$0}
     END
     {
      j=1; 
      while (j<i) 
      {print line[j+1] line[j]; j+=2}
     }' yourfile|awk '{print substr($4,7,length($4)-6),$6}'

this might work:

awk 'BEGIN
     {i=1}{line[i++]=$0}
     END
     {
      j=1; 
      while (j<i) 
      {print line[j+1] line[j]; j+=2}
     }' yourfile|awk '{print substr($4,7,length($4)-6),$6}'
╭⌒浅淡时光〆 2024-09-16 03:20:52
gawk '/^<td>/ {n = $2; getline; print gensub(/.*href="([^"]*).*/,"\\1",1), n}' infile

url1 Name1
url2 Name2
gawk '/^<td>/ {n = $2; getline; print gensub(/.*href="([^"]*).*/,"\\1",1), n}' infile

url1 Name1
url2 Name2
絕版丫頭 2024-09-16 03:20:52

awk 'BEGIN{RS=">\n"; FS="> |

每2行作为一条记录。

awk 'BEGIN{RS="></td>\n"; FS="> | </|\""}{print $7, $2}' infile

every 2 lines as a record.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文