0

我的文本文件的一部分说:

callingNumber: xxxxxxx 
irrelevantnumberinfo: xxxxxxx
irrelevantnumberinfo2: xxxxxxx 
number: 12345678

我希望我的原始文本文件的部分看起来像:

callingNumber: xxxxxxx 
irrelevantnumbeRinfo: xxxxxxx
irrelevantnumbeRinfo2: xxxxxxx 
numbeR: 12345678

我试过cat test.txt | grep -A3 callingNumber | sed -i 's/number/numbeR/g'了,但它一直告诉我没有 sed 的输入文件。

请注意,原始文本文件中有更多“数字”字,我只想更改这个特定部分。

4

2 回答 2

1

您可以sed使用普通替换单独使用两个表达式来完成s/find/replace/,例如

$ sed 's/rinfo/Rinfo/;s/^number/numbeR/' file
callingNumber: xxxxxxx
irrelevantnumbeRinfo: xxxxxxx
irrelevantnumbeRinfo2: xxxxxxx
numbeR: 12345678

或与grep,

$ grep -A3 callingNumber file | sed 's/rinfo/Rinfo/;s/^number/numbeR/'
(same result)

或者你有它,没有-i,你保证number不会出现在你不想改变的任何地方,例如grep -A3 callingNumber file | sed 's/number/numbeR/'


使用模式范围和下 3 行就地编辑

您可以使用sedwith 范围表达式进行替换并在后面的 3 行中进行编辑callingNumber

$ sed -i '/^callingNumber/,4s/number/numbeR/' file

每次出现callingNumberwith后更改 3 行awk

如果您需要在每次出现之后更改三行,callingNumber那么您可以使用awk并重定向到一个新文件,然后在完成后替换原始文件,例如

awk '/^callingNumber/{n=0} n<=3 {sub(/number/, "numbeR");n++}1' file > newfile \
mv -f newfile file
于 2020-04-09T02:14:48.013 回答
0

使用 GNU sed:

sed -i '/callingNumber/,+3{ s/number/numbeR/ }' file

输出到文件:

主叫号码:xxxxxx
无关号码信息:xxxxxxx
无关编号Rinfo2: xxxxxxx
号码:12345678
于 2020-04-09T03:07:32.807 回答