我正在尝试解析包含多个http链接的HTML文件。 我希望得到一个以特定字符串开头的BIG行,并以另一个特定字符串结尾,但我不知道这两个字符串之间是什么,所以这是我的问题:如果我像这样使用grep:
grep -E -o 'string1.+string2'
我得到了一个与正则表达式相对应的大行,但由于'。+',它最终会出现'string2'的最后一次。 实际上,我希望它在第一次出现'string2'时结束,所以我尝试了:
grep -E -o 'string1[^(string2)]+string2'
但它也不起作用,我得到了相同的结果:( ...
如何告诉grep匹配以'string1'开头并在'string2'第一次出现时结束的行?
感谢您阅读我
答案 0 :(得分:1)
+
运营商正在"贪婪"任何吃掉所有角色的人(包括string2
)。您可以通过添加?
使其变得不贪婪(只有在启用perl
匹配时才支持此功能,因此-P
标志):
grep -P -o 'string1.+?string2
答案 1 :(得分:0)
有些过于复杂awk
s
cat file
this is a test string1 get this data string2 but not this string2 end here
awk -F"string" '{split($3,a," ");print FS $2 FS a[1]}' file
string1 get this data string2
awk '{for (i=1;i<=NF;i++) {if ($i=="string1") f=1;if (f) printf $i FS; if ($i=="string2") f=0}print ""}' file
string1 get this data string2
看到更简单的版本会很高兴:)