[内容] Shell 文本掐头去尾的使用

内容一:掐头

1.1 只掐头从左数第 1 个出现的某个字符和此字符前面的所有内容

# complete=/dir1/dir2/dir3/dir4/test.file.txt
# echo ${complete#*/}
dir1/dir2/dir3/dir4/test.file.txt

(补充:这里以掐掉从左数第 1 个斜杠 “/” 以及前面的所有所有内容为例)

1.2 掐头从左数最后 1 个出现的某个字符和此字符前面的所有内容

# complete=/dir1/dir2/dir3/dir4/test.file.txt
# echo ${complete##*/}
test.file.txt

(补充:这里以掐掉从左数最后 1 个斜杠 “/” 以及前面的所有所有内容为例)

内容二:去尾

2.1 只去尾从右数第 1 个出现的某个字符和此字符后面的所有内容

# complete=/dir1/dir2/dir3/dir4/test.file.txt
# echo ${complete%.*}
/dir1/dir2/dir3/dir4/test.file

(补充:这里以掐掉从右数第 1 个点 “.” 以及后面的所有所有内容为例)

2.2 去尾从右数最后 1 个出现的某个字符和此字符后面的所有内容

# complete=/dir1/dir2/dir3/dir4/test.file.txt
# echo ${complete%%.*}
/dir1/dir2/dir3/dir4/test

(补充:这里以掐掉从右数最后 1 个点 “.” 以及后面的所有所有内容为例)

[命令] Linux 命令 basename (去除目录或文件的路径只显示此目录或文件)

案例一:去除某个目录或文件的路径只显示此目录或文件

# basename /root/test.txt
test.txt

(补充:这里以去除文件 /root/test.txt 的路径为例)

案例二:去除某 2 个目录或文件的路径只显示此 2 个目录或文件

2.1 去除某 2 个目录或文件的路径只显示此 2 个目录或文件 (最终结果只显示了第 1 个目录或文件)

# basename /root/test.txt /home/mingyuzhu/mingyuzhu.txt
test.txt

(补充:这里以去除文件 /root/test.txt 和文件 /home/mingyuzhu/mingyuzhu.txt 的路径为例)

2.2 去除某 2 个目录或文件的路径只显示此 2 个目录或文件

# basename -a /root/test.txt /home/mingyuzhu/mingyuzhu.txt
test.txt mingyuzhu.txt

(补充:这里以去除文件 /root/test.txt 和文件 /home/mingyuzhu/mingyuzhu.txt 的路径为例)

案例三:去除某个目录或文件的路径只显示此目录或文件,同时去除这个目录或文件的后缀

# basename -s .txt /root/test.txt
test

(补充:这里以去除文件 /root/test.txt 的路径同时去除后缀 .txt 为例)

[命令] Linux 命令 type (判断命令的类型)

案例一:显示某个命令的源文件

# type curl
curl is hashed (/usr/bin/curl)


补充:
1) 这里以显示 curl 命令为例
2) 从输出的结果可以看出 curl 命令的文件是 /usr/bin/curl 并且已经 hashed

案例二:显示某个命令的源文件类型

# type -t curl
file


补充:
1) 这里以显示 curl 命令为例
2) 从输出的结果可以看出 curl 命令的文件类型 file