文件名staff.txt和示例内容为:
JHON
MANAGER
10000
我想JHON
在一个文件中查找并想用另一个单词/数字更改该行之后第二行的内容。
我怎样才能做到这一点?
答案1
ed -s staff.txt <<< $'/JHON/+2s/.*/4242\nw\nq'
-s
这会在文件上以脚本模式 ( )调用 ed staff.txt
,并在 ANSI 引用的此处字符串中向其发送以下命令:
- 找到包含 ( )的行
JHON
并超出该行两行+2
.*
在那一行上,搜索并替换 ( )中的所有内容4242
w
将文件写入磁盘q
伊特编辑
中间\n
的 分隔不同的ed
命令。
或者,您可以使用以下c
命令更改行:
ed -s staff.txt <<< $'/JHON/+2c\n4242\n.\nw\nq'
此处,替换文本需要单独(在c
命令之后)输入,并以句点结尾 ( \.\n
)。
答案2
您可以使用sed
以下命令移动到下一行n
:
sed '/JHON/{n;n;s/.*/42/}'
答案3
使用awk
:
awk 'f{$0="newvalue";f=0}/JHON/{print;getline;f=1}1'
f{$0="newvalue";f=0}
- 如果f
为 true,则将线路设置为newvalue
并重置f
为0
/JHON/{print;getline;f=1}
- 如果JHON
找到模式打印它,打印下一行,并设置f
为1
1
- 打印
答案4
如果您只有一个人(一个注册者),您可以使用此代码:
awk '/JHON/{print $0; getline; print "SUPERVISOR"; getline; print "99999"; }' staff.txt
如果您的staff.txt
文件有很多人(很多寄存器)并且您应该仅替换 JHON 数据:
awk '/.*/{if($0=="JHON"){print $0; getline; print "SUPERVISOR"; getline; print "99999"; } else {print $0;}}' staff2.txt
示例staff2.txt
:
JHON
MANAGER
10000
ROGER
TEACHER
3000
ROBERT
SCIENTIST
20000
你应该得到这个输出:
JHON
SUPERVISOR
99999
ROGER
TEACHER
3000
ROBERT
SCIENTIST
20000
获得相同输出的另一种简短方法可能是:
awk '/JHON/{print;getline; print "SUPERVISOR"; getline; $0="99999"}1' staff2.txt
说明:如果行是JHON,则打印JHON,转到下一行,打印SUPERVISOR,转到下一行,将其替换为99999。如果行不是JHON,则仅打印它。