使用sed从“//”删除到行尾

时间:2015-11-05 21:09:10

标签: bash sed

所以我觉得标题是自我解释的。我是sed的新手,我在查找多字符模式(如//)时遇到问题,并将模式一直删除到行尾。例如,我想要这个

// here's some stuff
here's some other stuff // here's even more stuff

变成这个

here's some other stuff

我已经尝试了sed -i -e '/\/\*/d' $FILENAME,但这不起作用。

3 个答案:

答案 0 :(得分:4)

您可以将此sed命令与备用正则表达式分隔符~一起使用:

sed -i.bak '\~^[[:blank:]]*//~d; s~//.*~~' file
here's some other stuff

\~^[[:blank:]]*//~d用于删除//位于开头的所有行(或者在开始时的某些空格之后)。

s~//.*~~用于从//开始删除文本,其中//位于中间。

答案 1 :(得分:2)

sed -i -e 's|//.*||' -e '/^[[:space:]]*$/d' $FILENAME

使用|让你不用担心你的模式中的/。第二个只删除创建的只包含零个或多个空格的任何后续行。

echo -e '// some first comment\nsome comment // here is the comment' | sed -e 's|//.*||' -e '/^[[:space:]]*$/d'
some comment

这不像这里的另一个答案那样整洁,但它很容易阅读和理解。

[已更新以处理删除空行]

答案 2 :(得分:0)

sed -i 's/\/\/[^\/\/]\+$//' $FILENAME

修改

上面的代码会删除最后一次出现//之间的字符串,直到该行结束。

要删除第一次出现//的字符串,请按照评论中的建议使用以下内容:

sed -i 's/\/\/.*$//' $FILENAME