Unix中删除以CONSTRAINT开头的行,保留行尾为"))"的最后一个")"
处理CONSTRAINT行的文本转换方案
需求说明
删除文件中所有以CONSTRAINT关键字开头的行;若该行结尾为)),则保留结尾的一个)。
输入示例
CONSTRAINT FK_TESTA ( CD_AAA )) CONSTRAINT FK_TESTB ( CD_BBB ), CONSTRAINT FK_TESTD ( CD_DDD )) CONSTRAINT FK_TESTC ( CD_CCC ),
期望输出
) )
实现命令(sed)
用sed命令可以直接完成这个文本处理:
sed -E '/^CONSTRAINT/ { s/.*\)\)$/)/ t s/.*// }' your_file.txt
命令解释
/^CONSTRAINT/:仅匹配以CONSTRAINT开头的行- 第一个替换
s/.*\)\)$/)/:如果行尾是)),就把整行替换成单个) t:如果上面的替换成功执行,就跳过后续命令(避免把已经替换成)的行再清空)- 第二个替换
s/.*//:对不满足行尾是))的CONSTRAINT行,直接清空整行
测试验证
把输入示例保存为test.txt,执行上述命令后,输出结果和期望完全一致。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

