[[:space:]] 是否适用于所有 Linux 发行版上的 sed 模式?

amp*_*ent 2 sed regular-expression

使用[[:space:]]看起来有点不优雅,坦率地说,对于sed匹配模式,微软风格。我试图从“First Last”中提取“Last”,并且以下任一方法都有效:

echo "First Last" | sed s/First //
echo "First Last" | sed s/First\s//
Run Code Online (Sandbox Code Playgroud)

什么工作是

echo "First Last" | sed s/First[[:space:]]//
Run Code Online (Sandbox Code Playgroud)

我想知道:

  1. 是否有更简约的符号来匹配 中的空格sed
  2. 是否[[:space:]]适用于所有 Linux 发行版?

ter*_*don 5

是的,[:space:]应该被所有sed版本认可,它是POSIX定义的基本正则表达式的一部分。

\s符号来自 Perl Compatible Regular Extensions,它在许多程序(-P例如grep with )和语言(perl、php、java、javascript、python...)中实现。这些正则表达式语法中的任何一种都与 Microsoft 无关!

如果你想要 PCRE 语法,为什么不使用 Perl?这两个工作:

echo "First Last" | perl -pe 's/First\s//'
echo "First Last" | perl -pe 's/First *//'
Run Code Online (Sandbox Code Playgroud)

-p标志的意思是在执行传递-e给它的任何脚本后“打印每一行” 。