我有一个文本文件“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”
任何人都可以帮我这么做吗?
感谢
答案 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