如何使用 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]+$//'

相關內容