grep:无效的正则表达式
grep: Invalid regular expression
我有一个如下所示的文本文件:
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: Invalid regular expression
使用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 命令似乎没有排除任何内容。另外,你为什么要使用 wc
?我以为你想要台词,而不是台词数。
因此,如果您只是想要那些没有 []
的线条,那么这应该可行:
grep -v "\[" loaded.txt > new.txt
Grep 的替代方法
不清楚您是要删除可能包含方括号 []
的行,还是只删除方括号专门围绕字符的行。无论您打算使用哪种方法,sed
都可以轻松删除符合确定模式的行:
仅删除包含两个括号的字符的行 [...]
:
sed '/\[.*\]/d' loaded.txt > newloaded.txt
另一种方法可能是删除包含任一方括号的任何行:
sed '/\[/d;/\]/d' loaded.txt > newloaded.txt
(例如,包含 [
或 ]
的行将被删除)
您也可以使用 awk
:
awk -F\[ 'NF==1' file > newfile
cat newfile
haha1,haha2,haha3,haha4
letter1,letter2,letter3,letter4
num1,num2,num3,num4
或者这样:
awk '!/\[/' file
我有一个如下所示的文本文件:
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: Invalid regular expression
使用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 命令似乎没有排除任何内容。另外,你为什么要使用 wc
?我以为你想要台词,而不是台词数。
因此,如果您只是想要那些没有 []
的线条,那么这应该可行:
grep -v "\[" loaded.txt > new.txt
Grep 的替代方法
不清楚您是要删除可能包含方括号 []
的行,还是只删除方括号专门围绕字符的行。无论您打算使用哪种方法,sed
都可以轻松删除符合确定模式的行:
仅删除包含两个括号的字符的行 [...]
:
sed '/\[.*\]/d' loaded.txt > newloaded.txt
另一种方法可能是删除包含任一方括号的任何行:
sed '/\[/d;/\]/d' loaded.txt > newloaded.txt
(例如,包含 [
或 ]
的行将被删除)
您也可以使用 awk
:
awk -F\[ 'NF==1' file > newfile
cat newfile
haha1,haha2,haha3,haha4
letter1,letter2,letter3,letter4
num1,num2,num3,num4
或者这样:
awk '!/\[/' file