我已经看过很少类似的类型问题了,但是我在这里发布了不同的情况。 我必须将不同的字符串替换为文件中的相同出现。我用过
sed -i 's/X/Y/g' file.txt
对于类似的出现,我使用过像
这样的行号 sed -i '3s/X/Y/g ; 4s/X/Z/g' file.txt
只有当这些字符串始终在同一行时才可以使用。
Ex:file.txt
这种颜色是
... 更多行
这种颜色是
... 更多行
这种颜色是
... 更多行
这种颜色是
... 更多行`
我需要将它们更改为
此颜色为蓝色
... 更多行
此颜色为红色
... 更多行
此颜色为绿色
... 更多行
此颜色为黄色
... 更多行
不使用行号。如果添加更多信息,这些字符串的行号可以随时更改吗?
任何人都可以帮忙。谢谢
答案 0 :(得分:2)
awk
救援!
$ awk -v colors='blue,red,green,yellow' 'BEGIN {n=split(colors,v,",")}
/color/ {$0=$0 OFS v[i++%n+1]}1' file
将其嵌入到带引号的字符串中,完全删除双引号会更容易。只需更改为
$ awk -v colors='blue red green yellow' 'BEGIN {n=split(colors,v)}
/color/ {$0=$0 OFS v[i++%n+1]}1' file
如果你的颜色不是单个单词,你不能使用上面的,所以回到用逗号分隔(或任何其他分隔符),只需要逃避它们
$ awk -v colors='true blue,scarlet red,pistachio green,canary yellow' '
BEGIN {n=split(colors,v,\",\")}
/color/ {$0=$0 OFS v[i++%n+1]}1' file
答案 1 :(得分:2)
你的问题不明确,但它的声音就像你试图这样做:
awk 'NR==FNR{colors[NR];next} /This color is/{$0 = $0 OFS colors[++c]} 1' colors file
其中colors
是每行包含一种颜色的文件,file
是您希望添加颜色值的文件。如果那不是您想要的,那么编辑您的问题以更清楚地指定您的要求,并提出一个更好(和完整/可测试)的例子。