用bash替换文件中变量的路径值

时间:2013-11-25 20:00:53

标签: bash replace sed path cat

我有一个包含模拟输入的名单。我必须使用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,=和值之间指定任何个空格数?

谢谢, 格雷格

3 个答案:

答案 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变量中出现多个/出现错误消息。 你可以使用任何字符作为分隔符。