grep:无效的正则表达式

8

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

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

4个回答

13

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

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

1

一种替代Grep的方法

不清楚您是否希望删除可能包含方括号[]的行,还是仅删除特定字符被方括号包围的行。无论您打算使用哪种方法,sed都可以轻松删除符合明确模式的行:

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

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

另一种方法可能是删除包含任何括号的行:
sed '/\[/d;/\]/d' loaded.txt > newloaded.txt

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

0

你也可以使用 awk 来实现:

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

或者这样:

awk '!/\[/' file

0

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

所以,如果你只想要那些没有[]的行,那么这应该可以工作:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接