文件中所有带有注释的行都以 #
开头。如何删除以 #
开头的所有行(并且仅删除那些行)?其他包含 #
但不在行首的行应被忽略。
#blah \<nl>blah
算作单个“逻辑行”的通用约定一起使用,因为反斜杠转义了换行符?
make
,还有哪些实用程序使用“在结束评论之前使用反斜杠拼接行”?外壳(经过 bash 和 ksh 测试)没有。 C 和 C++ 确实在预处理器指令的其他处理之前处理换行符拼接,但它们是指令而不是注释。
\<nl>
转义也适用于评论。但是哇我错了。我还没有找到另一个例子...... :) 谢谢!
我有点惊讶没有人提出最明显的解决方案:
grep -v '^#' filename
如上所述,这解决了问题。
但请注意,一个常见的约定是将从 #
到行尾的所有内容都视为注释:
sed 's/#.*$//' filename
尽管例如将字符串文字中的 #
字符视为注释的开头(这可能与您的情况相关,也可能不相关)(并且它留下空行)。
以任意空格开头后跟 #
的行也可能被视为注释:
grep -v '^ *#' filename
如果空格只是空格,或者
grep -v '^[ ]#' filename
其中两个空格实际上是一个空格,后跟一个文字制表符(键入“control-v tab”)。
对于所有这些命令,省略 filename
参数以从标准输入读取(例如,作为管道的一部分)。
grep -v "^#" filename
与雷蒙德的解决方案相反:
sed -n '/^#/!p'
“不打印任何东西,除了不以#开头的行”
你可以直接编辑你的文件
sed -i '/^#/ d'
如果您还想删除以一些空格开头的注释行,请使用
sed -i '/^\s*#/ d'
通常,您希望保留脚本的第一行,如果它是一个 sha-bang,那么 sed
不应删除以 #!
开头的行。它还应该删除仅包含哈希但不包含文本的行。把它们放在一起:
sed -i '/^\s*\(#[^!].*\|#$\)/d'
要符合所有 sed 变体,您需要向 -i
选项添加备份扩展:
sed -i.bak '/^\s*#/ d' $file
rm -Rf $file.bak
您可以将以下内容用于 awk 解决方案 -
awk '/^#/ {sub(/#.*/,"");getline;}1' inputfile
这个答案建立在前面的 answer by Keith 之上。
egrep -v "^[[:blank:]]*#"
应过滤掉注释行。
egrep -v "^[[:blank:]]*(#|$)"
应该过滤掉评论和空行,这通常很有用。
有关 [:blank:]
和其他字符类的信息,请参阅 https://en.wikipedia.org/wiki/Regular_expression#Character_classes。
egrep
支持该语法;旧版本可能不会。
您可能还想删除空行
sed -E '/(^$|^#)/d' inputfile
删除所有空行以及任何空格后以 #
开头的所有行:
sed -E '/^$|^\s*#/d' inputfile
例如,请参阅以下 3 行已删除的行(仅包括行号!):
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
不定期副业成功案例分享
sed /^#/d
sed '/^#/ d' < inputFile.txt > outputFile.txt
sed -i '/^#/d' filepath
。sed -i '' '/^#/d' filepath
(because the -i suffix is mandatory)awk '/^#/ && !first { first=1 ; next } { print $0}'