bash - 通过 grep 查找文本并用 sed 替换该文本的路径

标签 bash sed

我有 *.dot 文件,例如:

...
0 -> 1 [color=black];
1 -> 2 [color=blue];
1 -> 3 [color=blue];
2 -> 4 [color=gold3];
..

我需要更改以 $a 数字开头的行的“颜色”。我可以使用

轻松获得 =blue
a="1"
cat experimental.dot | grep "^$a\ ->" | grep -o =[a-Z0-9]*

但我无法使用 sed 将文件中的 =blue 更改为 =red

最佳答案

a=1
sed "/^$a /s/\\(color=\\)[[:alnum:]]\\+/\\1red/" <<END
0 -> 1 [color=black];
1 -> 2 [color=blue];
1 -> 3 [color=blue];
2 -> 4 [color=gold3];
END
0 -> 1 [color=black];
1 -> 2 [color=red];
1 -> 3 [color=red];
2 -> 4 [color=gold3];

对于以变量值开头的所有行(添加空格,以便不匹配“10”或“11”),将“color=”后面的单词更改为红色。

关于bash - 通过 grep 查找文本并用 sed 替换该文本的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18818280/

相关文章:

bash - 循环遍历文件 bash 脚本

Bash 删除目录中的一半文件

linux - sed 无法处理 bash 脚本中的变量;请求一个文件。简单例子

c - 如何防止 c 解释 sed

bash - 如何base64编码/dev/random或/dev/urandom?

c - 使用 .sh 脚本测试 C 程序时显示输入

perl - 删除数据集中的空行

string - Jenkinsfile 中变量的插值

escaping - Bash 输出缺少 ']' 错误

php - 在 100 个文件中的 </body> 标签前批量插入代码