3

嗨,我正在编写 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

请帮我弄清楚。

4

2 回答 2

3

GNU sed

sed '/trng-linx |  17.2.18. |/s/O\s|/B\ |/' file
于 2013-06-19T11:50:38.107 回答
1

尝试这个:

 awk -F'|' '{OFS="|"; if ($1 ~ /trng-linx/ && $2 ~ /17\.2\.18\./) $4=" B "}1' tasklist.txt
于 2013-06-19T10:36:14.593 回答