【发布时间】:2011-08-26 05:40:58
【问题描述】:
我正在尝试从某些不以 # 开头的文件中提取行(已注释掉)。我将如何运行文件,忽略前面带有 # 的所有内容,但将不以 # 开头的每一行复制到不同的文件中。
谢谢
【问题讨论】:
标签: shell
我正在尝试从某些不以 # 开头的文件中提取行(已注释掉)。我将如何运行文件,忽略前面带有 # 的所有内容,但将不以 # 开头的每一行复制到不同的文件中。
谢谢
【问题讨论】:
标签: shell
更简单:grep -v '^[[:space:]]*#' input.txt > output.txt
【讨论】:
echo "this line # has a hash"。您需要将模式锚定到行的开头。还有,猫没用。试试这个:sed -e '/^\s*#/d' file1.txt > file2.txt
grep --version
od -c 运行您的输入,以查看[[:space:]]* 正则表达式不匹配的违规字符。
这假设您正在使用 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]
所以你说,删除任何以(可选空格或制表符)#开头的行,但打印其他所有内容。
我希望这会有所帮助。
【讨论】:
grep -v '^/[ ]*#/' file 简单一点。
grep -v 也可以。此外,许多 seds 支持 @pulsar 提倡的 [[:space:]] 语法,因此请先尝试替换它。
grep -v ^\# file > newfile
grep -v ^\# file | grep -v ^$ > newfile
不是花哨的正则表达式,但我将此方法提供给 Jr. Admins,因为它有助于理解管道和重定向。
【讨论】: