搜索特定的文本文件行,替换为某个字符

时间:2013-09-13 12:29:23

标签: bash replace sed awk

在文件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的人(不是最容易看到的代码)。谢谢!

3 个答案:

答案 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