编写Sed命令删除含带/不带双引号postgres的ROLE行
编写sed命令实现指定行删除
原始输入
CREATE ROLE "postgres"; ALTER ROLE "postgres" WITH INHERIT; CREATE ROLE postgres; ALTER ROLE postgres WITH INHERIT; CREATE ROLE "postgres-123"; ALTER ROLE "postgres-123" WITH INHERIT;
期望输出
CREATE ROLE "postgres-123"; ALTER ROLE "postgres-123" WITH INHERIT;
需求说明
需要一条sed命令实现原地编辑文件,删除所有包含ROLE postgres的行(其中postgres可以带双引号或不带双引号)。已知命令sed -i -E "/ROLE postgres\\b/d" file_name仅能删除postgres不带双引号的行,无法处理带双引号的情况。
解决方案
使用如下sed命令即可实现需求:
sed -i -E '/ROLE "?postgres"?\b/d' file_name
命令解释
-i:开启原地编辑模式,直接修改目标文件-E:启用扩展正则表达式语法,简化正则写法- 正则表达式
ROLE "?postgres"?\b:"?":匹配0个或1个双引号,同时兼容带双引号和不带双引号的postgres\b:单词边界,确保仅匹配完整的postgres单词,避免误删postgres-123这类包含postgres前缀的行d:删除匹配到的行
内容的提问来源于stack exchange,提问作者armchair
相关产品推荐
相关产品推荐

