我有一个文件 exa1.txt
其中包含以下文本:
wget -O backward-cpp-$VERSION.tar.gz https://github.com/bombela/backward-cpp/archive/v$VERSION.tar.gz
tar xf backward-cpp-$VERSION.tar.gz
testString
我需要使用 linux sed
附加/插入以下行命令
sed -i '/uctx->uc_mcontext.regs->nip/a \#elif defined(__s390x__)\n\ error_addr = reinterpret_cast<void*>(uctx->uc_mcontext.psw.addr);' backward-cpp-$VERSION/backward.hpp
我尝试了以下方法
选项1
sed -i '/tar xf backward-cpp-$VERSION.tar.gz/a\
sed -i '/uctx\->uc_mcontext.regs\->nip/a \\#elif defined\(__s390x__\)\n\ error_addr = reinterpret_cast<void*>(uctx->uc_mcontext.psw.addr);' backward-cpp-$VERSION/backward.hpp' exa1.txt /$BUILDDIR/envoy/ci/build_container/build_recipes/backward.sh
选项2
sed -i -e 's/testString/sed -i '/uctx->uc_mcontext.regs->nip/a \\#elif defined\(__s390x__\)\\n\\ error_addr = reinterpret_cast<void*>\(uctx->uc_mcontext.psw.addr\);' backward-cpp-$VERSION/backward.hpp/g' exa1.txt
但我收到此错误
-bash: nip/a: No such file or directory
-bash: backward-cpp-$VERSION/backward.hpp/g: No such file or directory
最佳答案
如果您只想在文件末尾添加一些行,则无需使用 sed:
$ cat exa1.txt - > output <<EOF
some lines you want to insert
go here
EOF
在命令中,-
指的是标准输入,即<<EOF
之间的heredoc内容和EOF
.
现在output
包含 con cat
第一个文件的内容以及 <<EOF
之间放置的任何行和EOF
。记得逃跑$
如果您不希望它们被 shell 扩展,否则在 Bash 等 shell 上,您可以使用 <<'EOF'
这样一切都按字面意思处理。
要实现“就地”编辑,只需使用mv
覆盖原始文件即可。 .
或者,只需创建另一个脚本,首先运行 exa1.txt
中的脚本然后是任何其他命令。
关于linux - 执行sed命令时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48882201/