one_two_three_four_five.rtf
我需要一个变量
中的五个我需要四个B变量
保留在C变量中
应从最后一个字符中读取
从最后一个下划线后注意。可能有许多下划线但应该采用C变量。
有可能吗?
答案 0 :(得分:0)
例如使用参数扩展
#!/bin/ksh
string="one_two_three_four_five.rtf"
base=${string%.rtf}
a=${base##*_}; base=${base%_$a}
b=${base##*_}; base=${base%_$b}
c=$base
echo "$a - $b - $c"
答案 1 :(得分:0)
s="one_two_three_four_five.rtf"
source <(sed -r 's/(.*)_([^_]*)_([^_]*)[.].*/C="\1"; B="\2";A="\3"/' <<< "${s}")
# Result:
echo "A=$A, B=$B, C=$C"
A=five, B=four, C=one_two_three
说明:
sed -r
无需转义反斜杠
(.*)_
匹配最大字符串直到下划线,条件是留下下划线以匹配剩余的字符串
([^_]*)
没有下划线的字符串
[.]
没有特殊含义的点
"\1"
首先记住字符串
<<< "${s}"
sed
的输入与echo "${s}" | sed ...
相似
<(..)
模拟文件,因此获取这些文件将执行命令。