【问题标题】:grep: Invalid regular expressiongrep:无效的正则表达式
【发布时间】:2015-07-08 01:58:08
【问题描述】:

我有一个如下所示的文本文件:

haha1,haha2,haha3,haha4
test1,test2,test3,test4,[offline],test5
letter1,letter2,letter3,letter4
output1,output2,[offline],output3,output4
check1,[core],check2
num1,num2,num3,num4

我需要排除所有具有“[]”的行并将它们输出到另一个文件,而不需要所有具有“[]”的行。

我目前正在使用这个命令:

grep ",[" loaded.txt | wc -l > newloaded.txt

但它给了我一个错误:

grep: 无效的正则表达式

【问题讨论】:

    标签: linux bash shell grep text-files


    【解决方案1】:

    使用grep -F 将搜索模式视为固定字符串。您也可以将wc -l 替换为grep -c

    grep -cF ",[" loaded.txt > newloaded.txt
    

    如果您好奇,[ 是一个特殊字符。如果您不使用-F,则需要使用反斜杠对其进行转义。

    grep -c ",\[" loaded.txt > newloaded.txt
    

    顺便说一句,我不确定你为什么要使用wc -l...?根据您的问题描述,听起来grep -v 可能更合适。 -v 反转 grep 的正常输出,打印 匹配的行。

    grep -vF ",[" loaded.txt > newloaded.txt
    

    【讨论】:

      【解决方案2】:

      Grep 的替代方法

      不清楚您是要删除可能包含括号[] 的行,还是只删除括号专门围绕字符的行。无论您打算使用哪种方法,sed 都可以轻松删除符合确定模式的线条:

      仅删除包含两个括号包围字符 [...] 的行:

      sed '/\[.*\]/d' loaded.txt > newloaded.txt
      

      另一种方法可能是删除包含任一方括号的任何行:

      sed '/\[/d;/\]/d' loaded.txt > newloaded.txt
      

      (例如,包含[] 的行将被删除)

      【讨论】:

        【解决方案3】:

        您的 grep 命令似乎没有排除任何内容。另外,你为什么使用wc?我以为你想要的是线条,而不是它们的数量。

        因此,如果您只想要那些没有[] 的行,那么这应该可以:

        grep -v "\[" loaded.txt > new.txt
        

        【讨论】:

          【解决方案4】:

          您也可以为此使用awk

          awk -F\[ 'NF==1' file > newfile
          cat newfile
          haha1,haha2,haha3,haha4
          letter1,letter2,letter3,letter4
          num1,num2,num3,num4
          

          或者这个:

          awk '!/\[/' file
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-08-11
            • 2011-08-09
            • 2014-06-29
            • 2018-04-16
            • 1970-01-01
            相关资源
            最近更新 更多