字符串替换文本文件

时间:2014-01-22 12:01:41

标签: linux sed awk grep

我有一个文本文件“out”,如下所示,

r 19.568805475 _16_ RTR  --- 189 cbr 532 [13a 10 c 800] [energy 1.095631 ei 0.000 es 0.000 et 0.552 er 1.352] ------- [0:2 17:0 23 16] [189] 8 0
f 19.568805475 _16_ RTR  --- 189 cbr 532 [13a 10 c 800] [energy 1.095631 ei 0.000 es 0.000 et 0.552 er 1.352] ------- [0:2 17:0 22 8] [189] 8 0
D 19.568805475 _16_ IFQ  ARP 190 cbr 532 [13a 10 10 800] [energy 1.095631 ei 0.000 es 0.000 et 0.552 er 1.352] ------- [0:2 17:0 24 8] [190] 6 0
r 19.569095175 _12_ MAC  --- 0 ACK 38 [0 c 0 0] [energy 0.841123 ei 0.000 es 0.000 et 0.316 er 1.843] 
s 19.569306186 _2_ MAC  --- 0 undefined 106 [0 ffffffff 2 800] [energy 0.889732 ei 0.000 es 0.000 et 0.633 er 1.477] ------- [2:255 -1:255 25 0] 

现在我想搜索带有“ cbr ”字样的行,如果同一行以“^ D ”开头,我必须替换“^ D“by”r“。

例如,

D 19.568805475 _16_ RTR  --- 189 cbr 532 [13a 10 c 800] [energy 1.095631 ei 0.000 es 0.000 et 0.552 er 1.352] 

上面的行有单词“cbr”,行以“D”开头。在这里我必须用“r”改变“D”

任何人都可以帮我这么做吗?

感谢

2 个答案:

答案 0 :(得分:4)

让我们使用sed

sed '/cbr/s/^D/r/' file
      ^^^ ^ ^^ ^
       |  | |  |
       |  | |  replace with "r"
       |  | starting with "D"
       |  replace
     string containing "cbr"

根据基本sed s/findsomething/andreplace/' file语法。

它返回:

r 19.568805475 _16_ RTR  --- 189 cbr 532 [13a 10 c 800] [energy 1.095631 ei 0.000 es 0.000 et 0.552 er 1.352] ------- [0:2 17:0 23 16] [189] 8 0
f 19.568805475 _16_ RTR  --- 189 cbr 532 [13a 10 c 800] [energy 1.095631 ei 0.000 es 0.000 et 0.552 er 1.352] ------- [0:2 17:0 22 8] [189] 8 0
r 19.568805475 _16_ IFQ  ARP 190 cbr 532 [13a 10 10 800] [energy 1.095631 ei 0.000 es 0.000 et 0.552 er 1.352] ------- [0:2 17:0 24 8] [190] 6 0
r 19.569095175 _12_ MAC  --- 0 ACK 38 [0 c 0 0] [energy 0.841123 ei 0.000 es 0.000 et 0.316 er 1.843] 
s 19.569306186 _2_ MAC  --- 0 undefined 106 [0 ffffffff 2 800] [energy 0.889732 ei 0.000 es 0.000 et 0.633 er 1.477] ------- [2:255 -1:255 25 0] 

答案 1 :(得分:1)

awk变体:

awk '/cbr/ {sub(/^D/,"r")}1' file