Shell 如何使用grep/sed/awk和regex只获取一行的一部分?
我有一个HTML文件,我只需要得到一个特定的部分。这里最大的挑战是这个HTML文件没有换行符,所以我的grep表达式工作得不好 这是我的HTML文件: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>
<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