awk - 使用 awk 在一些正则表达式之前打印第 N 条记录
问题描述
我有 awk 命令,它正在查找“匹配”并 在其后添加 5 行“字符串” :
awk '1;/match/{c=5}c&&!--c{print "string"}'
如何修改它以添加“字符串” N行,但在“匹配”之前?
例如,我有一个 test.txt 文件:
one
two
three
four
five
six
seven
eight
nine
ten
使用我的命令,我可以拥有:
cat test.txt | awk '1;/six/{c=2}c&&!--c{print "addedstring"}'
one
two
three
four
five
six
seven
addedstring
eight
nine
ten
所以我需要修改我的命令,在六行之前添加addedstring 2 行:
one
two
three
four
addedstring
five
six
seven
eight
nine
ten
解决方案
作为替代方案,这可以使用命令行轻松完成vim
:
vim -e - file -c '/^six$/' -c 'norm kOaddedstring' -c 'wq'
或更易读的版本:
vim -e - file <<EOF
/^six$/
norm kOaddedstring
wq
EOF
然后检查文件内容:
cat file
one
two
three
four
addedstring
five
six
seven
eight
nine
ten
vim 命令解释:
/^six$/
: 匹配仅six
作为内容的行norm kOaddedstring
:进入normal
命令模式。k
向上移动一行并在当前行之前O
插入文本addedstring
wq
:保存并退出更改
推荐阅读
- c - 解析 C 字符串并将部分字符串存储在变量中
- android - 我应该使用带有 1000 个子视图的 NestedHorizalScrollview 吗?
- c# - 带有代码的 Postgres Npgsql 连接池
- google-chrome - Firefox console getElementBy doesn't work
- sql - 如何使用 Druid SQL 解析列中的 json 数据?
- django - 如何在 Django 中创建用户状态活动停用切换按钮?
- flutter - 颤动动态多形式
- javascript - Paypal 智能按钮无法正确呈现
- r - 我可以在地理地图上叠加 ggplot 热图吗?
- ethereum - (中间值).toBigNumber 不是函数