如何在文件的开头添加包含输入和特殊字符的文本

时间:2017-03-24 11:33:29

标签: bash sed

我想在文件的开头添加以下文本(我想保留输入):

try {
    require('/opt/dynatrace-oneagent-6.5/agent/bin/any/onenodeloader.js')({server: 'http://test:8042', agentName: 'test'});
} catch (err) {
    console.error(err.toString());
}

我知道有一些问题。但我只是不能让它发挥作用。这是我尝试过的事情之一。我尝试了什么:

#!/bin/bash

sed -i '1itry {
    require('/opt/dynatrace-oneagent-6.5/agent/bin/any/onenodeloader.js')({server: 'http://test:8042', agentName: 'test'});
} catch (err) {
    console.error(err.toString());
}' output.json

但比我得到的更多:sed: -e expression #1, char 127: unexpected}'`

4 个答案:

答案 0 :(得分:1)

由于您的文字中存在所有特殊元字符的换行符,您应该避免使用sed

您可以使用cat

在shell中执行此操作
#!/bin/bash

# set your multiline variable
read -rd '' text<<'EOF'
try {
    require('/opt/dynatrace-oneagent-6.5/agent/bin/any/onenodeloader.js')({server: 'http://test:8042', agentName: 'test'});
} catch (err) {
    console.error(err.toString());
}
EOF

# use echo + cat to print variable before file content and redirect
echo "$text" | cat - output.json > $$.tmp && mv $$.tmp output.json

答案 1 :(得分:1)

要插入多行字符串,请尝试添加除最后一个之外的尾随sed -i '1i \ try { \ require('/opt/dynatrace-oneagent-6.5/agent/bin/any/onenodeloader.js')({server: 'http://test:8042', agentName: 'test'}); \ } catch (err) { \ console.error(err.toString()); \ } ' output.json

{{1}}

答案 2 :(得分:1)

这可能适合你(GNU sed和bash);

cat <<\! | sed -i '1ecat' file
try {
     require('/opt/dynatrace-oneagent-6.5/agent/bin/any/onenodeloader.js')({server: 'http://test:8042', agentName: 'test'});
}
catch (err) {
      console.error(err.toString());
}
!

将所需的行放在here-document中,并使用evaluate命令将其捕获到文件的开头

答案 3 :(得分:0)

这应该有效:

sed -i '1 i\try { require('/opt/dynatrace-oneagent-6.5/agent/bin/any/onenodeloader.js')({server: 'http://test:8042', agentName: 'test'});} catch (err) { console.error(err.toString());}'

我猜我失踪了。