文件中所有以 #
开头的注释行都需要删除。如何只删除这些行而保留其他包含#
的行,但该符号不在行首?
sed '/^#/ d' < inputFile.txt > outputFile.txt
的意思是从 inputFile.txt
文件中删除以 #
开头的行,并将结果输出到 outputFile.txt
文件中。 - Neil McGuigansed -i '/^#/d' 文件路径
。该命令的作用是删除文件路径中以井号(#)开头的行。 - lesderidsed -i '' '/^#/d' filepath
命令(因为必须使用-i后缀)。该命令的作用是删除文件中以#开头的行。 - paulcmawk '/^#/ && !first { first=1 ; next } { print $0}'
- Raymond Hettinger我有点惊讶,没有人提出最明显的解决方案:
grep -v '^#' filename
这个解决了所述的问题。
但请注意,一个常见的约定是从 #
到行末的所有内容都被视为注释:
sed 's/#.*$//' filename
虽然这可能并不适用于你的情况,但是它把例如字符串字面量中的#
字符视为注释的开头(这可能与你的情况有关),并留下空行。
以任意空格开头后跟着#
的行也可能被视为注释:
grep -v '^ *#' filename
如果空格只有空格,或者
grep -v '^[ ]#' filename
其中两个空格实际上是一个空格后面跟着一个文本制表符(键入“控制键-v”和“tab”)。
对于所有这些命令,省略文件名
参数以从标准输入读取(例如作为管道的一部分)。
grep -v "^#" filename
。 - Sergsed -n '/^#/!p'
"不要打印任何内容,除非该行不以 # 开头"
您可以直接使用 编辑器
编辑您的文件。
sed -i '/^#/ d'
sed -i '/^\s*#/ d'
通常情况下,如果脚本的第一行是sha-bang,您希望保留它,因此 sed
不应删除以#!
开头的行。此外,它还应删除仅包含哈希但没有文本的行。将所有这些放在一起:
sed -i '/^\s*\(#[^!].*\|#$\)/d'
为了与所有sed变体兼容,您需要将备份扩展名添加到-i
选项:
为了与所有sed变体兼容,您需要在-i
选项中添加备份扩展名:
sed -i.bak '/^\s*#/ d' $file
rm -Rf $file.bak
这个答案基于之前 Keith 的回答。
grep -Ev "^[[:blank:]]*#"
应该过滤掉注释行。
grep -Ev "^[[:blank:]]*(#|$)"
应该同时过滤掉注释和空行,通常非常有用。
关于 [:blank:]
和其他字符类的信息,请参考 https://en.wikipedia.org/wiki/Regular_expression#Character_classes。
egrep
支持该语法;旧版本可能不支持。 - Keith Thompsonawk '/^#/ {sub(/#.*/,"");getline;}1' inputfile
你可能也想删除空行
sed -E '/(^$|^#)/d' inputfile
grep -v '^ *\(#.*\|\)$'
命令来删除只包含空格或空格前有注释的行。 - techno如果你想从文件中以特定单词开头的位置开始删除,那么可以执行以下操作:
grep -v '^pattern' currentFileName > newFileName && mv newFileName currentFileName
因此,我们已经删除了所有以某种模式开头的行,将内容写入新文件,然后将内容复制回源/当前文件。
删除所有空行以及在任何空格后以#
开头的所有行:
sed -E '/^$|^\s*#/d' inputfile
1. # first comment
2.
3. # second comment
在测试了上述命令后,您可以使用选项-i
直接编辑输入文件。
就这样!
这里是一个循环遍历所有带有某个扩展名的文件的代码:
ll -ltr *.filename_extension > list.lst
for i in $(cat list.lst | awk '{ print $8 }') # validate if it is the 8 column on ls
do
echo $i
sed -i '/^#/d' $i
done
#blah \<nl>blah
被视为单个“逻辑行”,因为反斜杠转义了换行符? - sarnoldmake
之外,哪些实用程序使用“反斜杠拼接行以结束注释”?Shell(已测试bash和ksh)不会。C和C++在处理预处理器指令的其他处理之前确实处理换行符拼接,但它们是指令而不是注释。 - Jonathan Leffler\<nl>
转义也适用于注释。但是哇,我错了。我还没有找到另一个例子... :) 谢谢! - sarnold