我正在尝试获取/
之前的第一个单词我使用以下sed:
echo 'a/b/c' | sed 's/(.*)/(.*)/1/g'
但这里给出的是a/b
,我希望它只给出a
任何想法?
可以使用
echo 'a/b/c' | sed 's,([^/]*)/.*,1,'
细节:
([^/]*)
-第1组(1
):除/
以外的任何零或多个字符/
- a/
char.*
-字符串的剩余部分。
或者,如果您有一个变量,您可以使用字符串操作:
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