Shell 如何使用grep/sed/awk和regex只获取一行的一部分?

Shell 如何使用grep/sed/awk和regex只获取一行的一部分?,shell,awk,sed,scripting,grep,Shell,Awk,Sed,Scripting,Grep,我有一个HTML文件,我只需要得到一个特定的部分。这里最大的挑战是这个HTML文件没有换行符,所以我的grep表达式工作得不好 这是我的HTML文件: <a href="/link1" param1="data1_1" param2="1_2"><p>Test1</p></a><a href="/link2" param1="data1_1" param2="1_2"><p>Test2</p></a>

我有一个HTML文件,我只需要得到一个特定的部分。这里最大的挑战是这个HTML文件没有换行符,所以我的grep表达式工作得不好

这是我的HTML文件:

<a href="/link1" param1="data1_1" param2="1_2"><p>Test1</p></a><a href="/link2" param1="data1_1" param2="1_2"><p>Test2</p></a>

请注意,我有两个锚(


我不知道如何使用grep或sed实现这一点,我非常感谢您的帮助。

使用GNU awk for multi-char RS,如果这是您想要的第二张唱片:

$ awk 'BEGIN{RS="</a>"; ORS=RS"\n"} NR==2' file
<a href="/link2" param1="data1_1" param2="1_2"><p>Test2</p></a>
$awk'开始{RS=”“;ORS=RS“\n”}NR==2'文件
或者如果是标记为“Test2”的记录:

$awk'BEGIN{RS=”“;ORS=RS“\n”}/Test2/”文件
或:

$awk'开始{RS=”“;ORS=RS“\n;FS=”“}$2==“Test2”文件
使用Perl:

$ perl -pe '@a = split(m~(?<=</a>)~, $_);$_ = $a[1]' file
<a href="/link2" param1="data1_1" param2="1_2"><p>Test2</p></a>
$perl-pe'@a=split(m~(?这应该可以:

grep -o '<a[^>]*><p>Test2</p></a>' example.html
grep-o']*>Test2

'example.html
使用XML/HTML解析器(xmllint、xmlstarlet…)。
$ awk 'BEGIN{RS="</a>"; ORS=RS"\n"} /<p>Test2<\/p>/' file
<a href="/link2" param1="data1_1" param2="1_2"><p>Test2</p></a>
$ awk 'BEGIN{RS="</a>"; ORS=RS"\n"; FS="</?p>"} $2=="Test2"' file
<a href="/link2" param1="data1_1" param2="1_2"><p>Test2</p></a>
$ perl -pe '@a = split(m~(?<=</a>)~, $_);$_ = $a[1]' file
<a href="/link2" param1="data1_1" param2="1_2"><p>Test2</p></a>
perl -pe '                                       ' # Read line for line into $_
                                                   # and print $_ at the end
                     m~(?<=</a>)~                  # Match the position after
                                                   # each </a> tag
          @a = split(            , $_);            # Split into array @a
                                       $_ = $a[1]  # Take second item
grep -o '<a[^>]*><p>Test2</p></a>' example.html