如何获取具有分隔符的文件名的中间部分?

时间:2015-03-25 07:23:29

标签: bash shell

我知道获取文件名的第一部分和最后部分的方法,该文件名由分隔符分隔。例如:

#!/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

但如果我想获得bbbccc,我该如何获得它?非常感谢提前!

2 个答案:

答案 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)

更改internal field separator

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