如何用单条sed命令移除单行冗余单词、指定关键词并添加邮箱
单条sed命令实现文本处理需求
需求说明
- 移除单行内重复出现超过2次的冗余单词(同一单词最多保留2次)
- 过滤文本中的
TAGS、Owner、QA这三个关键词 - 为每行末尾追加指定邮箱地址(示例:
John@gmail.com)
示例输入
postgres vp-postgres None default:postgres-13 True stopped db.m6g.large 13.4 vpc-95525af1 TAGS Owner John@gmail.com TAGS QA TAGS autostop yes
示例输出
postgres vp-postgres None default:postgres-13 True stopped db.m6g.large 13.4 vpc-95525af1 John@gmail.com John@gmail.com John@gmail.com John@gmail.com autostop yes John@gmail.com
实现命令
sed -e ':a; s/\(\b\w\+\b\)\(\s\+\1\)\{2,\}/\1 \1/g; ta' -e 's/\b\(TAGS\|Owner\|QA\)\b\s*//g' -e 's/$/ John@gmail.com/' input.txt
命令拆解
处理重复单词:
:a定义循环标签s/\(\b\w\+\b\)\(\s\+\1\)\{2,\}/\1 \1/g匹配同一单词连续重复3次及以上的情况,替换为仅保留2次ta如果替换发生,跳转到标签a继续循环处理,确保所有重复超过2次的单词都被处理
过滤指定关键词:
s/\b\(TAGS\|Owner\|QA\)\b\s*//g匹配TAGS、Owner、QA整个单词,并删除单词及后面的多余空格
追加邮箱地址:
s/$/ John@gmail.com/在每行末尾添加指定邮箱地址
内容的提问来源于stack exchange,提问作者user202304
相关产品推荐
相关产品推荐

