我有一个包含模拟输入的名单。我必须使用bash更改一些变量的路径。文本文件具有以下我想要更改的值:
opt_path ='/ home / gle / test_workflow',
我想用cat和sed替换opt_path的值,我尝试了以下但是它不起作用:
new_path=/my/new/path
cat namelist.wps | sed "s/^opt_path.*/opt_path = '${new_path}'/g"
它返回以下错误:
sed: -e expression #1, char 29: unknown option to `s'
有人有想法吗?
修改 经过一些试验,以下代码有效。
#!/bin/bash
new_path=/my/new/path
cat namelist.wps | sed "s|^.* opt_path =.*$| opt_path = '${new_path}', |g" > namelist.wps.new
虽然它只能在= character之间使用一个空格。如何在opt_path,=和值之间指定任何个空格数?
谢谢, 格雷格
答案 0 :(得分:2)
你必须在正则表达式中转义斜杠。否则sed
认为您正在结束s
命令。
new_path
变量需要如下所示:\/my\/new\/path
或者,您可以使用不同的分隔符:
sed "s|^opt_path.*|opt_path = '${new_path}'|g"
答案 1 :(得分:0)
试试这个(bash的例子):
#!/bin/bash
new_path=/my/new/path
echo "opt_path = '/home/gle/test_workflow'" | sed -E "s|(^opt_path[ ]*=[ ]*')([^']*)|\1$new_path|g"
我使用echo
代替cat
复制并粘贴准备运行代码。
答案 2 :(得分:0)
尝试这个
sed -i“s#^ opt_path。*#opt_path ='$ new_path'#g”namelist.wps
使用分隔符作为/它会在new_path变量中出现多个/出现错误消息。 你可以使用任何字符作为分隔符。