user123456 Asked: 2020-02-07 01:02:11 +0800 CST2020-02-07 01:02:11 +0800 CST 2020-02-07 01:02:11 +0800 CST awk:在模式后的 N 行之后插入行 772 我想在模式之后的第 3 行插入一行。z示例:在每次匹配后插入单词3 行a 从 a b1 c1 d1 a b2 c2 d2 ... 至 a b1 c1 z d1 a b2 c2 z d2 ... awk sed 4 个回答 Voted Romeo Ninov 2020-02-07T01:18:01+08:002020-02-07T01:18:01+08:00 像这样的东西可以做这项工作: awk 'BEGIN {v1=-100} {if ($1=="a") v1=FNR;if (FNR-v1==3) print "z"; print $0}' input_file 脚本检查记录是否为“a”并将变量设置为指向当前行。然后检查当前记录行减去先前存储的行是否等于 3 并打印字符串,然后打印当前行 user391836 2020-02-07T01:30:09+08:002020-02-07T01:30:09+08:00 或sed 插入/附加: sed '/^a/{n;n;n;i\z }' FILE sed '/^a/{n;n;a\z }' FILE Jeff Schaller 2020-02-07T09:29:13+08:002020-02-07T09:29:13+08:00 您可以为此使用脚本编辑器ed:在匹配后全局插入z三行/a/: $ ed -s input-file g/a/+3i\ z wq 或者,一行: printf '%s\n' 'g/a/+3i\' 'z' 'wq' | ed -s input-file ed命令是: g/a/+3i\-- 全局执行后续命令,即:匹配/a/后三行,插入一些文本。尾部反斜杠将插入命令继续到下一行。 z- 插入文本z。缺少尾部反斜杠,插入命令结束,完成全局执行。 wq-- 将文件写回磁盘并退出。 Best Answer Ed Morton 2020-02-08T15:52:49+08:002020-02-08T15:52:49+08:00 $ awk '/a/{c=1} (c++)==4{print "z"} 1' file a b1 c1 z d1 a b2 c2 z d2
像这样的东西可以做这项工作:
脚本检查记录是否为“a”并将变量设置为指向当前行。然后检查当前记录行减去先前存储的行是否等于 3 并打印字符串,然后打印当前行
或
sed
插入/附加:您可以为此使用脚本编辑器
ed
:在匹配后全局插入z
三行/a/
:或者,一行:
ed
命令是:g/a/+3i\
-- 全局执行后续命令,即:匹配/a/后三行,插入一些文本。尾部反斜杠将插入命令继续到下一行。z
- 插入文本z
。缺少尾部反斜杠,插入命令结束,完成全局执行。wq
-- 将文件写回磁盘并退出。