如何使用sed编辑bash文本文件

时间:2014-01-28 16:38:24

标签: bash sed edit

genius:johnny bravo:56.80:100:38

你好:杰克约翰:89.10:290:189

我的文本文件test.txt中有上面两行 如果用户正确输入字段1和字段2,我希望更改最后一个值,在本例中为189到50。

我做了什么,但没有工作

read title # genius/joker
read name  # jonny bravo or jack john
echo "enter new value"
read newValue
sed -i "s/^\($title:$name:[^:]*\):[^:]*:/\1:$newValue:/" test.txt 

从我的sed,我意识到代码的第4个字段是更改,在这种情况下290更改为新值而不是189。 你们任何人都可以告诉我哪里出错了吗?

提前致谢

2 个答案:

答案 0 :(得分:4)

对于这种情况,awk套件更好:

title="hello"
name="jack john"
n=50
awk -v f1="$title" -v f2="$name" -v n=$n -F: '$1==f1 && $2==f2{$NF=n}1' OFS=: file

输出:

genius:johnny bravo:56.80:100:38
hello:jack john:89.10:290:50

答案 1 :(得分:1)

您的正则表达式不正确。试试这个:

sed -i "s/^\($title:$name:.*\):.*$/\1:$newValue/" test.txt