使用awk读取模式中的文件

使用awk读取模式中的文件,awk,Awk,我有一个如下方式的输入文件 <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> 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>
url1 Name1
url2 Name2
有人能帮我解决这个看起来微不足道的问题吗?谢谢。

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

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

如果您关心封闭标记,或者它们不是标准的一致性标记,那么就不能使用正则表达式来解析HTML。这是不可能的


添加:oops,您确实关心上下文,忘记regexp,使用真正的HTML解析器

awk '
/a href=\".*\"/ { sub( /^.*a href=\"/,"" ); sub(/\".*/,"");  print $0, name }
                { name = $2 }
'
这可能会奏效:

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}'
awk'开始
{i=1}{line[i++]=$0}
结束
{
j=1;
而(j
gawk'/^/{n=$2;getline;print gensub(/.*href=“([^”]*).*/,“\\1”,1),n}
url1名称1
url2名称2

awk'BEGIN{RS=“>\n”;FS=“>|您的easy perl脚本无法将其切掉;-)。通过给定的输入,它将输出行“url1”和“url2”。+1,用于指出需要真正的解析器(并使用术语准同步)。
gawk '/^<td>/ {n = $2; getline; print gensub(/.*href="([^"]*).*/,"\\1",1), n}' infile

url1 Name1
url2 Name2