所以我有一个如下所示的大文件:
RESOURCETAGMAPPINGLIST arn:aws:ec2:us-east-1:XXXXXX:instance/i-XXXXXXXXXXXXXXXXX
TAGS app-name appname1
RESOURCETAGMAPPINGLIST arn:aws:ec2:us-east-1:XXXXXX:instance/i-XXXXXXXXXXXXXXXXX
TAGS app-name appname2
RESOURCETAGMAPPINGLIST arn:aws:ec2:us-east-1:XXXXXX:instance/i-XXXXXXXXXXXXXXXXX
TAGS app-name appname1
..
Run Code Online (Sandbox Code Playgroud)
我只想修改该行RESOURCETAGMAPPINGLIST并打印其他行而不进行修改。然后我想只打印匹配上的特定字段,如下所示:
arn ec2 us-east-1 XXXXXX
TAGS app-name appname1
arn ec2 us-east-1 XXXXXX
TAGS app-name appname2
arn ec2 us-east-1 XXXXXX
TAGS app-name appname1
..
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 awk gsub 命令,但确实无法解决该-F:问题。任何帮助将不胜感激,无论是 awk、sed 还是 perl。
和awk。我使用至少一个空格 ( +) 或 ( |) 一个冒号 ( :) 作为输入字段分隔符。
如果一行包含字符串RESOURCETAGMAPPINGLIST,则打印第 2、4、5、6 列并停止处理该行并继续处理下一行。如果某行不包含,RESOURCETAGMAPPINGLIST则不更改地打印完整行。
awk -F ' +|:' '/RESOURCETAGMAPPINGLIST/{print $2,$4,$5,$6; next} {print}' file
Run Code Online (Sandbox Code Playgroud)
输出:
arn ec2 us-east-1 XXXXXX 标签 应用程序名称 appname1 arn ec2 us-east-1 XXXXXX 标签 应用程序名称 appname2 arn ec2 us-east-1 XXXXXX 标签 应用程序名称 appname1
请参阅:Stack Overflow 正则表达式常见问题解答