grep:无效的正则表达式



>我有一个文本文件,看起来像这样:

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:无效的正则表达式

使用 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

Grep的另一种方法

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

要仅删除包含字符两边括号的行,请执行以下操作[...]

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

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

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

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

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

因此,如果您只需要没有[]的行,那么这应该有效:

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

您也可以为此使用 awk

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

或者这个:

awk '!/[/' file

相关内容

  • 没有找到相关文章

最新更新