Bash 如何获取文件名中间部分的分隔符?
我知道获取由分隔符分隔的文件名的第一部分和最后一部分的方法。例如:Bash 如何获取文件名中间部分的分隔符?,bash,shell,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 但是,如果我想获得bbb或ccc,
#!/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
,我该如何获得它呢?非常感谢
$ 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
这要求awk打印第二个名称或您选择的任何名称打印$2
IFS=. set $file_name
echo $1
aaa
echo $2
bbb
echo $3
ccc
echo $4
ddd
echo $first_name
aaa
echo $middle1
bbb
echo $middle2
ccc
echo $last_name
ddd
IFS=. set $file_name
echo $1
aaa
echo $2
bbb
echo $3
ccc
echo $4
ddd