2010-03-12 78 views
1

我很抱歉,如果這是一個非常愚蠢的問題。我有數據格式:Grep/RegExp幫助

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 

有沒有辦法到grep每一行落在跨度標籤的外部的任一側比賽?

+0

你到底在找什麼?存在的字符串,但只有在span標記中不存在的字符串? – 2010-03-12 05:33:33

+0

我只需要找到標籤外部特定字符串的所有行 - 如果它顯示在裏面,它很好,但它不被視爲匹配。 – Calvin 2010-03-12 06:18:11

+0

謝謝澄清。 – 2010-03-12 06:27:40

回答

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 
0

,或者嘗試用sed:

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

HTH

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

這只是在span標籤之前測試StringGoesHere,並在span標籤之後再次測試。如果每行有多於一組的span標籤,這將不起作用,並且如果該行沒有任何span標籤也不起作用。

+0

正確,但小口頭解釋可能有幫助。 – 2010-03-12 06:29:33

0

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

應該找到任何符合SearchString所有,然後刪除其中SearchString裏面<span> ... </span>線。