sed 相当于 perl -pe

use*_*882 2 perl sed

我正在寻找相当于perl -pe. 理想情况下,sed如果可能,它将替换为。任何帮助都受到高度赞赏。

代码是:

perl -pe 's/^\[([^\]]+)\].*$/$1/g'
Run Code Online (Sandbox Code Playgroud)

Sun*_*eep 6

$ echo '[foo] 123' | perl -pe 's/^\[([^\]]+)\].*$/$1/g'
foo

$ echo '[foo] 123' | sed -E 's/^\[([^]]+)\].*$/\1/'
foo
Run Code Online (Sandbox Code Playgroud)
  • sed默认情况下接受来自命令行的代码,因此-e不需要(尽管可以使用)
  • 打印模式空间是默认的,所以-p不需要,sed -n类似于perl -n
  • -E在这里使用是为了尽可能接近 Perl 正则表达式。sed支持 BRE 和 ERE(不像 Perl 那样具有丰富的功能),甚至不同的实现也不同。
    • 使用 BRE,此示例的命令将是: sed 's/^\[\([^]]*\)\].*$/\1/'
  • \在字符类中不是特殊的,除非它是一个转义序列,例如\t\x27等等
  • 反向引用使用\N格式(并限制为最大值9
  • 另请注意,g在任何一种情况下都不需要标志,因为您使用的是线锚