[英]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.