我想从文件名

时间:2018-03-01 18:52:02

标签: ksh

one_two_three_four_five.rtf

我需要一个变量

中的五个

我需要四个B变量

保留在C变量中

应从最后一个字符中读取

从最后一个下划线后注意。可能有许多下划线但应该采用C变量。

有可能吗?

2 个答案:

答案 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 ...相似  <(..)模拟文件,因此获取这些文件将执行命令。