簡體   English   中英

bash sed 從第一次出現到右邊替換

[英]bash sed replace from first ocurrence to right

我正在嘗試獲取 / 之前的第一個單詞

我正在使用以下 sed:

echo 'a/b/c' | sed 's/\(.*\)\/\(.*\)/\1/g'

但這給了我a/b ,我希望它只給我a

有任何想法嗎?

您可以使用

echo 'a/b/c' | sed 's,\([^/]*\)/.*,\1,'

詳情

  • \([^/]*\) - 第 1 組( \1 ):除/之外的任何零個或多個字符
  • / - 一個/字符
  • .* - 字符串的其余部分。

或者,如果你有一個變量,你可以使用字符串操作:

s='a/b/c'
echo "${s%%/*}"
# => a

在這里, %%從末尾刪除與/* glob 模式匹配的最長子字符串,直到包含它的字符串中的第一個/為止。

這可以在bash本身中輕松完成,而無需調用任何外部實用程序:

s='a/b/c'
echo "${s%%/*}"

a

# or else
echo "${s/\/*}"

a

使用sed和備用分隔符來防止與數據中的類似字符發生沖突。

$ echo 'a/b/c' | sed 's#/.*##'
a

為了清晰、簡單和高效,使用cut而不是sed來隔離字符分隔的字段:

$ echo 'a/b/c' | cut -d'/' -f1
a

$ echo 'a/b/c/d/e/f/g/h/i' | cut -d'/' -f5
e

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM