1

在 filemy_file.ini中,我想修改以如下开头的行dataspecs

替换dataspecs old_val old stuff blah blah ! blah blah

dataspecs $new_val ! blah blah, wherenew_val是一个 bash 变量,之后的所有内容都!被保留。另外,我不知道old_val.

我不在乎是bashsed还是awkbash,我只是在寻找一个我能理解的简单答案。对于刚刚学习 sed 和 awk 的人(不是最容易查看的代码),我真的很感激一个解决方案,特别是如果你能解释解决方案的代码意味着什么。谢谢!

4

3 回答 3

1

我建议这种形式的 sed:

sed "s/^\\(dataspecs \\)[^!]*\\( !.*\\)/\\1${new_val}\\2/" my_file.ini

-i如果要直接修改文件,请添加选项。

sed -i "s/^\\(dataspecs \\)[^!]*\\( !.*\\)/\\1${new_val}\\2/" my_file.ini
于 2013-09-13T12:48:48.377 回答
1

使用 sed:

sed -i.bak "s/^\( *dataspecs \)[^\!]*/\1${new_val} /" my_file.ini

PS:我正在使用-ised 的内联标志进行内联编辑,这将保存修改后的文件。

于 2013-09-13T12:35:16.887 回答
0
awk '/dataspecs old_val/ {$2="$new_val"}1' my_file.ini
于 2013-09-13T12:44:50.880 回答