提问人:armchair 提问时间:9/20/2023 最后编辑:armchair 更新时间:9/21/2023 访问量:52
Sed 删除所有包含 ROLE {rolename} 的行
Sed to remove all lines containing ROLE {rolename}
问:
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 命令来就地编辑文件,以删除所有出现的行 contains(postgres 可以带或不带双引号)ROLE postgres
sed -i -E "/ROLE postgres\\b/d" file_name
删除行,但不删除双引号中的行。ROLE postgres
postgres
答:
0赞
Barmar
9/20/2023
#1
sed -i -r '/ROLE "? *postgres\b/d' filename
"?
= 可选双引号*
= 任意数量的空格,包括 0postgress\b
=postgres
后跟单词边界
0赞
Ed Morton
9/21/2023
#2
$ sed -E '/ROLE (postgres|"postgres")/d' file
CREATE ROLE "postgres-123";
ALTER ROLE "postgres-123" WITH INHERIT;
添加或以其他方式在完成测试后更新输入文件。-i
如果这不能达到您想要的效果,请编辑您的问题,以包括在您的示例输入/输出中不起作用的情况。
评论