我有一个文件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
答案 0 :(得分:0)
如果您只想在文件末尾添加一些行,则无需使用sed:
$ cat exa1.txt - > output <<EOF
some lines you want to insert
go here
EOF
在命令中,-
引用标准输入,即<<EOF
和EOF
之间的heredoc的内容。
现在output
包含第一个文件内容的con cat
,以及<<EOF
和EOF
之间的任何行。如果您不希望它们被shell扩展,请记得逃避$
,否则在Bash之类的shell上,您可以使用<<'EOF'
以便按字面意思对待所有内容。
要实现“就地”编辑,只需使用mv
覆盖原始文件。
或者,只需创建另一个脚本,首先在exa1.txt
中运行脚本,然后再创建其他任何命令。