2011-08-25 41 views

回答

3

簡單:grep -v '^[[:space:]]*#' input.txt > output.txt

+0

這個很好用,我用過: cat file1.txt | sed -e'/ \ s * \#/ d'> file2.txt – Danny

+0

@Danny,它會刪除任何包含散列的行,包括一行:'echo'這一行#有一個散列「'。你需要將你的模式錨定到行首。另外,貓也沒用。試試這個:'sed -e'/^\ s *#/ d'file1.txt> file2.txt' –

+0

@Glenn,直到hash標記之前有空白爲止。如果有東西被標籤和註釋,它不會刪除該行。有什麼想法嗎? – Danny

1

這是假設你使用的Unix/Linux shell和命令可用的Unix工具包,並要保留原始文件的副本。

cp file file.orig 
mv file file.fix 
sed '/^[  ]*#/d' file.fix > file 
rm file.fix 

或者,如果你已經有了一個很好的閃閃發光的新GNU sed中,所有被概括爲

cp file file.orig 
sed -i '/^[  ]*#/d' file 

在這兩種情況下,sed命令的正則表達式,就是要[spaceCharTabChar] 所以你說,刪除任何以(可選空格或製表符字符)#開頭的行,但打印其他所有行。

我希望這會有所幫助。

+0

'grep -v'^/[] *#/'file'有點簡單。 –

+0

'grep -v'也可以。另外,許多seds支持由@pulsar提倡的'[[:space:]]'語法,所以請先替換它。 – shellter

1
grep -v ^\# file > newfile 
grep -v ^\# file | grep -v ^$ > newfile 

不花哨的正則表達式,但我提供這個方法小管理員,因爲它與管道和重定向的理解有所幫助。

相關問題