好的,这让我发疯了。
我有一个冒号分隔的4个字段文件。我试图只用变量替换最后一个字段。但问题是当两行具有相同的内容时,它们都将被改变。我在想是否可以给一个关于我想改变哪一行的参考。换句话说,如果第一个字段是R2,则替换其最后一个字段
文件:
R1:name1:date1:black
R2:name2:date2:black
我希望它像这样
R1:name1:date1:black
R2:name2:date2:black2
这是我到目前为止所拥有的
变量已经分配了第四个字段。已为名称分配了zenity文本框,供用户输入名称。
variable=$(awk -F ":" '$2 ~ /'"$name"'/ {print $4}' file)
sed -i 's/'$variable'/black2/g' file
提前致谢。
答案 0 :(得分:2)
您可以限制sed将其替换应用于哪些行:
sed -i '/^R2/s/:black$/:black2/' file
请注意该行开头的^
和$
,以避免在该行的其他位置替换黑色。
编辑:我将g参数删除为sed,因为每行需要单个替换。 g参数适用于行,而不适用于整体输入。
答案 1 :(得分:2)
或者使用awk的解决方案,但无法像sed那样修改到位这样的文件,因此需要mv:
awk -F ":" '($1 == "R2" && $4 == "black"){print $1 ":" $2 ":" $3 ":black2"} ($1 != "R2" || $4 != "black"){print $1 ":" $2 ":" $3 ":" $4}' file > file1
mv file1 file
或者更短:
awk -F ":" '{print $1 ":" $2 ":" $3 ($1 == "R2" && $4 == "black"? ":black2" : ":" $4)}' file > file1
mv file1 file