2011-08-25 128 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 

不花哨的正则表达式,但我提供这个方法小管理员,因为它与管道和重定向的理解有所帮助。