我想从文件名中提取字符串

问题描述 投票:0回答:2

one_two_three_four_five.rtf

我在A变量中需要五个

我需要四个B变量

并保留在C变量中

应该从最后一个字符读取

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

可能吗?

ksh
2个回答
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"

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

© www.soinside.com 2019 - 2024. All rights reserved.