如何提取 Fish shell 中的子字符串?
How to extract substring in Fish shell?
我得到以下变量:
set location "America/New_York"
并希望仅显示 /
(斜线)之前的部分 使用 fish
shell 语法 .
预期结果
America
Bash相当于
使用bash,我只是简单地使用了一个参数扩展:
location="America/New_York"
echo ${location##*/}"
问题
如何以 fish
的方式做到这一点?
一个可能的解决方案是使用 cut
但是,这看起来很老套:
set location "America/New_York"
echo $location|cut -d '/' -f1
America
从 fish 2.3.0 开始,有一个名为 string
的内置函数,它有几个子命令,包括 replace
,因此您可以执行
string replace -r "/.*" "" -- $location
或
set location (string split "/" -- $location)[1]
见http://fishshell.com/docs/current/commands.html#string。
或者,cut
、sed
或 awk
等外部工具也能正常工作。
使用 string split
的字段选择器 -f
> string split / "America/New_York" -f1
America
因此:
set location (string split / "America/New_York" -f1)
旁注:对于后一个涉及多个斜杠的字符串,我不知道有什么比繁琐的更好的了 -r -m1 -f2
:
> string split / "foo/bar/America/New_York" -r -m1 -f2
New_York
我得到以下变量:
set location "America/New_York"
并希望仅显示 /
(斜线)之前的部分 使用 fish
shell 语法 .
预期结果
America
Bash相当于
使用bash,我只是简单地使用了一个参数扩展:
location="America/New_York"
echo ${location##*/}"
问题
如何以 fish
的方式做到这一点?
一个可能的解决方案是使用 cut
但是,这看起来很老套:
set location "America/New_York"
echo $location|cut -d '/' -f1
America
从 fish 2.3.0 开始,有一个名为 string
的内置函数,它有几个子命令,包括 replace
,因此您可以执行
string replace -r "/.*" "" -- $location
或
set location (string split "/" -- $location)[1]
见http://fishshell.com/docs/current/commands.html#string。
或者,cut
、sed
或 awk
等外部工具也能正常工作。
使用 string split
-f
> string split / "America/New_York" -f1
America
因此:
set location (string split / "America/New_York" -f1)
旁注:对于后一个涉及多个斜杠的字符串,我不知道有什么比繁琐的更好的了 -r -m1 -f2
:
> string split / "foo/bar/America/New_York" -r -m1 -f2
New_York