【发布时间】:2015-06-18 13:54:49
【问题描述】:
我有以下 sed 替换,如果在该行中找到某个字符串,它将用不同的文本替换整行。
sed "s/.*FOUNDSTRING.*/replacement \"text\" for line"/ test.txt
这很好用——但是,例如,我想在“for”之后添加一个新行。我最初的想法是试试这个:
sed "s/.*FOUNDSTRING.*/replacement \"text\" for \n line"/ test.txt
但这最终会替换为以下内容:
replacement "text" for n line
期望的结果:
replacement "text" for
line
【问题讨论】:
-
这是什么版本的 sed?你用的是什么外壳?你确定你有这样引用的 sed 模式吗?我希望在替换中使用未引用的
\n(因为外壳会剥离它)。 -
这应该可行,尽管您的报价可能会好一些。
-
@EtanReisner
\n被引用。 -
Mac OS X 自带 BSD sed,它无法处理替换子句中的
\n。如果你可以依赖 bash,你可以使用它的$''C 风格的字符串,即sed $'s/.*FOUNDSTRING.*/replacement "text" for \n line/' -
对不起,我的错。它必须是
\\\n(这最终是一个反斜杠,后跟一个换行符)。