0%

shell截取字段的实例

shell中特殊符的使用

参考: https://www.cnblogs.com/du-z/p/15322745.html

示例:file=”/dir1/dir2/dir3/my.file.txt”

“#”: 表示最短匹配

1
${file#*/}:删掉第一个/ 及其左边的字符串:dir1/dir2/dir3/my.file.txt

“##”: 表示最长匹配

1
${file##*/}:删掉最后一个/  及其左边的字符串:my.file.txt

“%”: 表示从右开始的第一个匹配

1
${file%/*}:删掉最后一个 /  及其右边的字符串:/dir1/dir2/dir3

通过从左到右的某个字节数开始截取,截取多少个字节

1
${file:5:5}:提取第5 个字节右边的连续5个字节:/dir2

计算变量值的长度

1
2
echo ${#file} 
结果:27

变量值中的字符串替换

1
2
${file/dir/path}:将第一个dir 替换为path:/path1/dir2/dir3/my.file.txt
${file//dir/path}:将全部dir 替换为path:/path1/path2/path3/my.file.txt

反向截取字符的方法

rev命令是将输入行反转

1
2
echo "2024-03-13_144312-1302944-gpio_001_pass.tar.gz" | rev | awk -F'-' '{print $1}' | rev
结果:gpio_001_pass.tar.gz

实现同名排序(sort)

1
2
3
4
5
6
7
8
9
10
11
12
13
find -name "*failure*" | rev | awk -F'-' '{print $1}' | rev | awk -F'_' '{print $1"_"$2}' | sort
结果如下:
hdmi_121
hdmi_121
hdmi_121
hdmi_121
hdmi_121
hdmi_121
rtc_004
rtc_004
vpu_018
vpu_018
vpu_018

统计同名的个数(uniq -c)

1
2
3
4
5
find -name "*failure*" | rev | awk -F'-' '{print $1}' | rev | awk -F'_' '{print $1"_"$2}' | sort | uniq -c
统计结果:
110 hdmi_121
2 rtc_004
3 vpu_018