这个sed命令是如何工作的?。。。。。。sed-E';s/(^-])-([^-]$)/\1xx\2/g';

这个sed命令是如何工作的?。。。。。。sed-E';s/(^-])-([^-]$)/\1xx\2/g';,sed,Sed,我发现这个命令很难理解 我甚至找不到man sed下的-E选项,但该命令仍然有效。 替换没有意义,因为它在流的开始处查看,然后立即显示为管道 任何解释都将不胜感激。不确定您使用的是sed的哪个实现 看看gnu实现 参考: 不确定您正在使用的是sed的哪个实现 看看gnu实现 参考: 只要它不是三个或更多破折号序列的一部分,它就用xx替换--。|不是管道,它是另一种选择(^-])表示“行的开头,或者不是-”的字符,([^-])表示“不是-的字符,或者是行的结尾”。然后,这些组捕获的任何内容都会包含

我发现这个命令很难理解 我甚至找不到
man sed
下的
-E
选项,但该命令仍然有效。 替换没有意义,因为它在流的开始处查看,然后立即显示为管道


任何解释都将不胜感激。

不确定您使用的是
sed
的哪个实现

看看gnu实现

参考:


不确定您正在使用的是
sed
的哪个实现

看看gnu实现

参考:


只要它不是三个或更多破折号序列的一部分,它就用
xx
替换
--
|
不是管道,它是另一种选择
(^-])
表示“行的开头,或者不是
-
”的字符,
([^-])
表示“不是
-
的字符,或者是行的结尾”。然后,这些组捕获的任何内容都会包含在输出中,保持不变,因为我们只想在上下文中匹配它们。

只要它不是三个或更多破折号序列的一部分,它就会用
--
替换
-
|
不是管道,它是另一种选择
(^-])
表示“行的开头,或者不是
-
”的字符,
([^-])
表示“不是
-
的字符,或者是行的结尾”。然后,这些组捕获的任何内容都会包含在输出中,保持不变,因为我们只想为上下文匹配它们。

-E
启用扩展reg.ex。在某些系统中:您需要了解更多关于正则表达式的信息。从这里开始:
-E
启用扩展注册表项。在某些系统中:您需要了解更多关于正则表达式的信息。从这里开始:
sed -E 's/(^|[^-])--([^-]|$)/\1xx\2/g'
'-E'
'-r'
'--regexp-extended'
    Use extended regular expressions rather than basic regular
    expressions.  Extended regexps are those that 'egrep' accepts; they
    can be clearer because they usually have fewer backslashes.
    Historically this was a GNU extension, but the '-E' extension has
    since been added to the POSIX standard
    (http://austingroupbugs.net/view.php?id=528), so use '-E' for
    portability.  GNU sed has accepted '-E' as an undocumented option
    for years, and *BSD seds have accepted '-E' for years as well, but
    scripts that use '-E' might not port to other older systems.  *Note
    Extended regular expressions: ERE syntax.