【问题标题】:Grep / RegExp helpGrep / 正则表达式帮助
【发布时间】:2010-03-12 14:36:02
【问题描述】:

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

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 每一行以匹配任何一侧的 span 标签之外的匹配项?

【问题讨论】:

  • 您到底在寻找什么?一个存在但仅当它不存在于 span 标签中的字符串?
  • 我只需要找到特定字符串出现在标签之外的所有行——如果它出现在标签内部,那很好,但它不被视为匹配。

标签: grep


【解决方案1】:
grep "\(StringGoesHere.*<span>.*</span>\)\|\(<span>.*</span>.*StringGoesHere\)"

这只是在 span 标签之前测试StringGoesHere,然后在 span 标签之后再次测试。如果每行有超过 1 组 span 标签,这将不起作用,如果该行没有任何 span 标签,也不会起作用。

【讨论】:

  • 正确,不过口头解释可能会有所帮助。
【解决方案2】:

如果有,请使用 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

【讨论】:

    【解决方案3】:

    或者试试 sed:

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

    HTH

    【讨论】:

      【解决方案4】:

      grep "SearchString" | grep -v "&lt;span&gt;.*SearchString.*&lt;/span&gt;"

      应该找到任何带有SearchString 的行,然后删除SearchString&lt;span&gt; ... &lt;/span&gt; 中的行。

      【讨论】:

        猜你喜欢
        • 2011-06-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多