所以我觉得标题是自我解释的。我是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
,但这不起作用。
答案 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