2015-04-29 99 views
3

我有一個文本文件,它看起來像這樣:的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: Invalid regular expression

回答

3

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

謝謝你的這個答案,很好的解釋! – tuturyokgaming

0

你的grep命令似乎沒有排除任何東西。另外,你爲什麼使用wc?我以爲你想要的是線條,而不是他們的數量。

所以,如果你只是想臺詞,就像你說的,沒有[],那麼這應該工作:

grep -v "\[" loaded.txt > new.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