替换匹配两个模式的行

时间:2013-06-19 10:17:52

标签: bash shell sed awk

您好我正在编写shell脚本,我必须通过引用两个参数将状态O替换为B,如下所示

1. trng-linx |  17.2.18. | change status to O to P in project tasklist | O | 1m
2. trng-lvk1 |  17.2.18. | change P to O in project tasklist | O | 1m

我想将状态从| O |更改为| B |,用于匹配模式trng-linx17.2.18.

我尝试使用此

sed -i '/^.*\(17\.2\.18\.\).*/s/O/B/' tasklist.txt

但它会替换两行的状态而不是第一行。

这是我想要的输出:

1. trng-linx |  17.2.18. | change status to O to P in project tasklist | B | 1m
2. trng-lvk1 |  17.2.18. | change P to O in project tasklist | O | 1m

请帮我弄清楚。

2 个答案:

答案 0 :(得分:3)

GNU sed

sed '/trng-linx |  17.2.18. |/s/O\s|/B\ |/' file

答案 1 :(得分:1)

试试这个:

 awk -F'|' '{OFS="|"; if ($1 ~ /trng-linx/ && $2 ~ /17\.2\.18\./) $4=" B "}1' tasklist.txt