在文件my_file.ini
中,我想修改以dataspecs
开头的行,如下所示:
用
替换dataspecs old_val old stuff blah blah ! blah blah
dataspecs $new_val ! blah blah
,其中new_val
是一个bash变量,保留!
之后的所有内容。另外,我不知道old_val
的价值。
我不在乎它是sed
还是awk
还是只是bash,我只是在寻找一个我能理解的简单答案。我真的很感激解决方案,特别是如果你能解释解决方案的代码意味着什么,对于刚学习sed和awk的人(不是最容易看到的代码)。谢谢!
答案 0 :(得分:1)
使用sed:
sed -i.bak "s/^\( *dataspecs \)[^\!]*/\1${new_val} /" my_file.ini
PS:我使用sed的内联标记-i
进行内联编辑,这将保存修改后的文件。
答案 1 :(得分:1)
我建议使用这种形式的sed:
sed "s/^\\(dataspecs \\)[^!]*\\( !.*\\)/\\1${new_val}\\2/" my_file.ini
如果要直接修改文件,请添加-i
选项。
sed -i "s/^\\(dataspecs \\)[^!]*\\( !.*\\)/\\1${new_val}\\2/" my_file.ini
答案 2 :(得分:0)
awk '/dataspecs old_val/ {$2="$new_val"}1' my_file.ini