Grep / RegEx帮助

时间:2010-03-12 04:48:54

标签: grep

如果这是一个非常愚蠢的问题,我道歉。我有以下格式的数据:

etc etc etc <span>etc etc etc</span> etc etc etc
etc etc etc <span>etc etc etc</span> etc etc etc
etc etc etc <span>etc etc etc</span> etc etc etc

有没有办法让每一行都能找到一个超出两侧跨度标签的匹配?

4 个答案:

答案 0 :(得分:1)

grep "\(StringGoesHere.*<span>.*</span>\)\|\(<span>.*</span>.*StringGoesHere\)"

这只是在span标记之前测试StringGoesHere,在span标记之后再测试一次。如果每行有多组span标记,则无效,如果该行没有任何span标记,则无效。

答案 1 :(得分:0)

如果你拥有它,请使用gawk(下次说明你的操作系统)

gawk 'BEGIN{
    RS="</span>"
    FS="\n"
}
{
  m=split($0,a,"<span>")
  if( a[1] ~ /word/){
    print "found: "a[1]" in line: "NR
  }
} ' file

输出

$ cat file
word <span> word blah</span> word
word <span> word
          blah</span>
word etc <span> word blah</span> etc

$ ./shell.sh
found: word  in line: 1
found:  word
word  in line: 2
found:
word etc  in line: 3

答案 2 :(得分:0)

或尝试sed:

sed 's:<span>.*</span>::' <FILE>

HTH

答案 3 :(得分:0)

grep "SearchString" | grep -v "<span>.*SearchString.*</span>"

应该找到SearchString的任何行,然后移除SearchString位于<span> ... </span>内的行。