Ste*_*hen 398
您可以使用字符串运算符:
$ foo=1:2:3:4:5
$ echo ${foo##*:}
5
Run Code Online (Sandbox Code Playgroud)
从the:This This This This This This This This trim trim trim trim trim trim.
${foo <-- from variable foo
## <-- greedy front trim
* <-- matches anything
: <-- until the last ':'
}
Run Code Online (Sandbox Code Playgroud)
a3n*_*3nm 338
另一种方法是在前后反转cut:
$ echo ab:cd:ef | rev | cut -d: -f1 | rev
ef
Run Code Online (Sandbox Code Playgroud)
这使得很容易获得最后一个字段,或从末尾编号的任何字段范围.
Wil*_*ell 71
使用cut来获取最后一个字段很困难,但这里是awk和perl中的(一组)解决方案
$ echo 1:2:3:4:5 | awk -F: '{print $NF}'
5
$ echo 1:2:3:4:5 | perl -F: -wane 'print $F[-1]'
5
Nic*_*ott 28
假设使用相当简单(例如,没有转义分隔符),您可以使用grep:
$ echo "1:2:3:4:5" | grep -oE "[^:]+$"
5
Run Code Online (Sandbox Code Playgroud)
细分 - 在行的末尾找到所有字符而不是分隔符([^:])($).-o仅打印匹配的部分.
Pau*_*ce. 18
单程:
var1="1:2:3:4:5"
var2=${var1##*:}
Run Code Online (Sandbox Code Playgroud)
另一个,使用数组:
var1="1:2:3:4:5"
saveIFS=$IFS
IFS=":"
var2=($var1)
IFS=$saveIFS
var2=${var2[@]: -1}
Run Code Online (Sandbox Code Playgroud)
另一个有阵列:
var1="1:2:3:4:5"
saveIFS=$IFS
IFS=":"
var2=($var1)
IFS=$saveIFS
count=${#var2[@]}
var2=${var2[$count-1]}
Run Code Online (Sandbox Code Playgroud)
使用Bash(版本> = 3.2)正则表达式:
var1="1:2:3:4:5"
[[ $var1 =~ :([^:]*)$ ]]
var2=${BASH_REMATCH[1]}
Run Code Online (Sandbox Code Playgroud)
Abd*_*_98 11
如果你想使用,你可以尝试这样的事情cut:
echo "1:2:3:4:5" | cut -d ":" -f5
Run Code Online (Sandbox Code Playgroud)
你也可以grep像这样使用try :
echo " 1:2:3:4:5" | grep -o '[^:]*$'
Run Code Online (Sandbox Code Playgroud)
小智 10
$ echo "a b c d e" | tr ' ' '\n' | tail -1
e
Run Code Online (Sandbox Code Playgroud)
只需将分隔符转换为换行符,然后选择最后一个条目tail -1.
使用sed:
$ echo '1:2:3:4:5' | sed 's/.*://' # => 5
$ echo '' | sed 's/.*://' # => (empty)
$ echo ':' | sed 's/.*://' # => (empty)
$ echo ':b' | sed 's/.*://' # => b
$ echo '::c' | sed 's/.*://' # => c
$ echo 'a' | sed 's/.*://' # => a
$ echo 'a:' | sed 's/.*://' # => (empty)
$ echo 'a:b' | sed 's/.*://' # => b
$ echo 'a::c' | sed 's/.*://' # => c
Run Code Online (Sandbox Code Playgroud)
这里有很多很好的答案,但我仍然想使用basename来分享这个答案:
basename $(echo "a:b:c:d:e" | tr ':' '/')
Run Code Online (Sandbox Code Playgroud)
但是,如果字符串中已经有一些“/”,它将失败。如果斜杠 / 是您的分隔符,那么您只需(并且应该)使用基本名称。
这不是最好的答案,但它只是展示了如何使用 bash 命令发挥创造力。
| 归档时间: |
|
| 查看次数: |
359604 次 |
| 最近记录: |