我知道获取文件名的第一部分和最后部分的方法,该文件名由分隔符分隔。例如:
#!/bin/bash
file_name=aaa.bbb.ccc.ddd
first_name=${file_name%%.*}
last_name=${file_name##*.}
echo first name is: $first_name
echo last name is: $last_name
输出结果为:
first name is: aaa
last name is: ddd
但如果我想获得bbb
或ccc
,我该如何获得它?非常感谢提前!
答案 0 :(得分:1)
$ file_name=aaa.bbb.ccc.ddd
$ echo "$file_name" | awk -F. '{print $2}'
bbb
$ echo "$file_name" | awk -F. '{print $3}'
ccc
或者,捕获变量:
$ middle1=$(echo "$file_name" | awk -F. '{print $2}')
$ middle2=$(echo "$file_name" | awk -F. '{print $3}')
$ echo "middle1=$middle1 and middle2=$middle2"
middle1=bbb and middle2=ccc
-F.
这告诉awk
使用句点(.
)作为字段分隔符。因此,在awk术语中,名字将是$1
,第二个名称是$2
,等等。示例中的姓氏是$4
,但通常可以访问姓氏为$NF
。
print $2
这要求打印$2
,第二个名称或您选择的任何名称。
答案 1 :(得分:1)
IFS=. read first_name middle1 middle2 last_name <<< "$file_name"
输出如下:
echo $first_name
aaa
echo $middle1
bbb
echo $middle2
ccc
echo $last_name
ddd
或者用set,也很简单:
IFS=. set $file_name
echo $1
aaa
echo $2
bbb
echo $3
ccc
echo $4
ddd