我想用一段代码替换单行string1
。
我可以使用sed命令来完成它:
sed -i "s|..|a very long code|g"
代码可以覆盖三行。但是,我们的代码样式要求代码必须位于每行的某些列下。对于格式化,我使用"输入"按键。似乎"输入"按键会导致"未终止的s命令"错误。
有没有好的bash命令呢?
另外,如何用一行替换这个多行代码?该代码包含一些%
,*
和一些正则表达式字符。似乎模式空间不应该有它们。
答案 0 :(得分:2)
使用\n
表示换行符。
:~> sed "s|string1|#include \"test.h\"\n#include \"release.h\"|g"
会打印
#include "test.h"
#include "release.h"
您可以根据需要输入空格
:~> echo sleep100 | sed "s|sleep100|\
for (int i=0; i< 100; i++){\n\
sleep(1);\n}|g"
会打印格式化的循环结构
for (int i=0; i< 100; i++){
sleep(1);
}
通过一些迂回编码,你甚至可以在sed命令的每一行的开头保留必要数量的空格。
:~> bs4="$(printf '%b' '\b' '\b' '\b' '\b')" ;\
echo sleep100 | sed "s|sleep100|\
${bs4}for (int i=0; i< 100; i++){\n\
sleep(1);\n}|g"
诀窍的本质是克服sed
的限制,解释\b
以不同的方式逃脱。我们不是使用转义序列,而是设置实际的退格字符来吞噬额外的空格。
P.S。只要您使用反斜杠转义它们,替换表达式中就可以包含$
,%
和*
等特殊字符
分别为\$
,\%
和\*
。