【问题标题】:search a string in a file as ignoring the lines beginning with #在文件中搜索字符串,忽略以 # 开头的行
【发布时间】:2011-03-01 00:47:18
【问题描述】:

我想在带有“awk”或“grep”的文件中查找诸如“qwertty=”之类的字符串,但我不想看到带有# 的行。请看示例

grep -ni "qwertty"   /aaa/bbb
798:#  * qwertty - enable/disable 
1222:#qwertty=1
1223:qwertty=2  
1224:#qwertty=3

我想找到第 1223 行。 用于此目的的搜索查询应该是什么?

【问题讨论】:

    标签: unix find awk grep query-string


    【解决方案1】:
    grep -ni '^qwertty=' /aaa/bbb
    

    如果您想要更大的灵活性(例如,在行中的任何地方都没有哈希,关键字前可能有空格,关键字可能嵌入更大的单词中,并且可能在 '=' 符号周围有空格),那么您需要更复杂的表达式:

    grep -ni '^[^#]*qwertty[^#]*=[^#]*$' /aaa/bbb
    

    【讨论】:

    • @ephieste: awk '/^[^#]*qwertty[^#]*=[^#]*$/' /aaa/bbb?
    • 当我创建一个新文件并编写上述行时,该命令有效。这很奇怪,但它不适用于我服务器上的某些文件和字符串。我想我错过了一点。比如找不到下面这行:pm3gppXmlEnabled=true
    • @ephieste:您提供的示例不包含“qwertty”,因此找不到它...但是您如何使正则表达式适应新要求?请注意,awk 模式区分大小写;您必须将 q 替换为 [qQ] 以使其不区分大小写。或者检查一个使正则表达式不区分大小写的 GNU 扩展(我没有查看它是否存在,但它可能存在)。
    【解决方案2】:

    如果我正确理解了这个问题,我会这样解决困境:

    grep -v '^#' | grep -ni "qwertty"
    

    或者更好:

    sed '/^#/d' | grep -ni "qwertty"
    

    【讨论】:

      【解决方案3】:

      awk '/^#/ {next} /qwertty/' afile

      【讨论】:

        【解决方案4】:
        grep -ni "qwertty"   /aaa/bbb|grep -v '^#'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-01-08
          • 1970-01-01
          • 2021-08-14
          • 2011-12-30
          • 1970-01-01
          • 1970-01-01
          • 2022-11-01
          • 2021-05-25
          相关资源
          最近更新 更多