>我有一个文本文件,看起来像这样:
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