linux sed 用正则表达式替换失败

埃德温

所以我有以下有效的正则表达式,但不适用于 sed

正则表达式101

^(\S*HTTPS*_SERVER\S*)(\s*'https*:\/\/)(\S*)('\);)$

和我的文字file.txt

define('HTTP_SERVER', 'http://localhost:31270');
define('HTTPS_SERVER', 'https://localhost:31270');

然后当我尝试做:

sed -i.bak -r 's/^\(\S*HTTPS*_SERVER\S*\)\(\s*\'https*:\/\/\)\(\S*\)\(\'\);\)$/\1\2test.com\4/' file.txt

它什么也不做。

任何想法这里有什么问题?是因为转义字符吗?

维克多·斯特里比尤夫

由于您使用的是 POSIX ERE 语法(-r选项),因此使用一对未转义的 (). 此外,由于您有一个'内部模式,您需要在s/.../.../命令周围使用双引号

sed -i.bak -r "s/^(\S*HTTPS*_SERVER\S*)(\s*'https*:\/\/)(\S*)('\);)$/\1\2test.com\4/" file.txt

查看在线演示

请注意,您可以在模式中使用除/避免转义/符号以外的分隔符(例如,您可以使用"s,<pattern>,<replacement>,", 因为模式本身中没有逗号)。Besdies,根据此线程,如果您确实需要使用单引号正则表达式定义,则可以'将模式中的文字替换\x27实体。

此外,如果您不需要在 Group 1 和 Group 2 之间插入任何文本,您可以将两个组模式合并为一个,并且 - 当您删除组 3 时,您甚至不需要捕获它。

所以,另一种可能看起来像

sed -r 's,^(\S*HTTPS*_SERVER\S*\s*\x27https*://)\S*(\x27\);)$,\1test.com\2,' file.txt

请参阅另一个在线演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用SED或AWK(或任何可行的方法)替换日期-Linux正则表达式

来自分类Dev

Linux sed命令替换正则表达式字符串

来自分类Dev

Linux sed命令替换正则表达式字符串

来自分类Dev

Linux sed正则表达式转义

来自分类Dev

用sed替换正则表达式组

来自分类Dev

用sed替换几个正则表达式组

来自分类Dev

sed正则表达式失败

来自分类Dev

sed-Linux中的正则表达式方括号检测

来自分类Dev

IP和可选CIDR的Linux Grep或Sed正则表达式

来自分类Dev

带有正则表达式问题的Linux CentOS sed命令

来自分类Dev

如何标记文本的出现(正则表达式,sed,awk)(Linux)

来自分类Dev

正则表达式用SED / AWK替换特定列

来自分类Dev

使用带有sed的正则表达式用下划线替换空格

来自分类Dev

用sed命令和正则表达式替换包含引号的值

来自分类Dev

正则表达式用sed替换模板路径琥珀色

来自分类Dev

正则表达式用变量捕获替换(sed或perl)

来自分类Dev

sed用正则表达式替换大括号内的数字

来自分类Dev

使用正则表达式用sed替换文件

来自分类Dev

用sed中的正则表达式替换字符串

来自分类Dev

用 sed 替换正则表达式的第 N 个匹配项

来自分类常见问题

sed中的正则表达式替换问号

来自分类Dev

sed正则表达式的位置替换

来自分类Dev

使用sed使用正则表达式替换IP

来自分类Dev

使用sed替换的正则表达式

来自分类Dev

正则表达式匹配,但sed无法替换

来自分类Dev

sed中的正则表达式替换问号

来自分类Dev

SED命令未替换(工作的正则表达式)

来自分类Dev

使用正则表达式进行sed替换输出

来自分类Dev

sed 命令替换为正则表达式