执行Sed命令时出错

时间:2018-02-20 09:48:15

标签: linux bash ubuntu sed

我有一个文件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

1 个答案:

答案 0 :(得分:0)

如果您只想在文件末尾添加一些行,则无需使用sed:

$ cat exa1.txt - > output <<EOF
some lines you want to insert
go here
EOF

在命令中,-引用标准输入,即<<EOFEOF之间的heredoc的内容。

现在output包含第一个文件内容的con cat,以及<<EOFEOF之间的任何行。如果您不希望它们被shell扩展,请记得逃避$,否则在Bash之类的shell上,您可以使用<<'EOF'以便按字面意思对待所有内容。

要实现“就地”编辑,只需使用mv覆盖原始文件。

或者,只需创建另一个脚本,首先在exa1.txt中运行脚本,然后再创建其他任何命令。