如何使用 sed 正确修剪字符串 - 如果模式不存在,则不杀死该字符串?

如何使用 sed 正确修剪字符串 - 如果模式不存在,则不杀死该字符串?

我正在编写一个函数,zsh其中有一个字符串

"find . -a -print:10"

:10部分需要从右侧修剪掉。这可能会在未来发生变化,成为:23等等:77,所以似乎:[0-9]+需要这样的模式。

此外,该字符串可能具有以下形式

find . -a -print

:[0-9]+在这种情况下,如果末尾没有模式,则字符串应保持不变。

所以

  • find . -a -print:10应该成为find . -a -print
  • find . -a -print应该保持为find . -a -print

到目前为止我已经尝试过的

% sed -nr 's/(.*)(:[0-9]+)?/\1/p' <<<'find . -a -print:10'
find . -a -print:10     # ':10' not getting trimmed

如果我尝试

sed -nr 's/(.*)(:[0-9]+)/\1/p' <<<'find . -a -print:10'
find . -a -print  # ':10' getting trimmed GOOD ✔✔ 

但同样的sed表达

 sed -nr 's/(.*)(:[0-9]+)/\1/p' <<<'find . -a -print'
 # no output

我怎样才能正确修剪这个字符串?

答案1

-n如果您不想抑制默认输出,为什么要使用它?

只需使用:

sed -E -e 's/:[0-9]+$//'

相关内容