我需要删除/删除用户输入行中的注释而不删除任何代码。例如:
mail -s 'text' brown < text #comments
如何删除评论并保持代码完整? 我可以删除以#开头的行,但如果它从行的中间某处开始则不行。
我试过了:
echo $line | sed -e 's/\
但它不起作用。知道我做错了吗?
另外,如何检测#不用于开始评论的案例? 例如,引用#和以#结尾的代码行,因为它们不是注释。
echo $line | sed -e '/^#/d'
在这一行中,#不用作注释,而是用作代码的一部分。我发现如果#在引号之内或者在#之前没有空白字符,我需要检测到。如何保持输出不变?
答案 0 :(得分:2)
您可以使用此#
awk
删除到行尾
awk '{sub(/#.*$/,"")}1' file
但如果您有这样的文件:
#!/bin/bash
pidof tail #See if tail is running
if [ $? -ne 0 ] ; then #start loop
awk '{print " # "$8}' file >tmp # this is my code
fi # end of loop
awk -F# '{for (i=1;i<=NF;i++) print $i}' file > tmp2
a=a+1 # increment a
如果不破坏某些评论,就无法自动删除评论。
答案 1 :(得分:0)
好吧,考虑一下在bash发表评论后几乎总会发生的事情。
#comment...
#another comment
换行!这实际上是一个角色。所以,你要做的就是在你的#之后添加一个通配符,以包含实际的评论文本,然后添加一个换行符&#39;字符&#39;在末尾。 你实际上需要使用\ n而不是尝试按Enter键。不幸的是我现在不在linux上,有时分隔符(反斜杠)不会好好工作。 尝试像`\ n`这样的东西可能有用,或者可能使用$&#39; \ n&#39;。
编辑:使用正则表达式^将指示新行的开始,而$表示结束。
至于不删除实际代码,匹配紧跟#后面的空格应该有效。我会匹配#。
之前的空格或换行符无论如何,请确保不要意外毁掉你正在处理的任何事情,以防万一我错了。