问题:
路径名为 /home/ lxy/ hhhhh-a.bbb.cc.d (格式类型固定)
其中 现在我只想要 a.bbb.cc 这一段。
其中 hhhhh- 格式固定 ,a.bbb.cc.d 这一段长度有浮动,但前面的 a. 和后面的 .d 是固定的
解决方法:
1.如果/home/ lxy/ hhhhh-a.bbb.cc.d是文件中的字符串(即echo '/home/ lxy/ hhhhh-a.bbb.cc.d'>test.txt ),可以通过sed -n 's/.*hhhhh-\(.*\)\.d/\1/p' test.txt
2.以'-'为分隔符,用cut取第二个字段(只要路径中不包含'-'即可):echo "/home/lxy/hhhhh-a.bbb.cc.d" | cut -d'-' -f2 但该方法只能取出a.bbb.cc.d
3.为防止路径中有'-',可以先取出文件名,在使用cut:echo "/home/lxy/hhhhh-a.bbb.cc.d" | awk -F/ '{print $NF}'| cut -d'-' -f2 但该方法只能取出a.bbb.cc.d
4.echo "/home/lxy/hhhhh-a.bbb.cc.d" | awk -F'-' '{print $2}' | cut -f 1-3 -d'.'
cut
用法:cut 选项 参数
选项:
-d:指定字段的分隔符,默认的字段分隔符为“TAB”;
-f:显示指定字段的内容;
-b:仅显示行中指定字节范围的内容;
-c:仅显示行中指定字符范围的内容;
-n:与“-b”选项连用,不分割多字节字符;
--complement:显示指定字段以外的字段
--out-delimiter=<字段分隔符>:指定输出内容是的字段分割符;
指定范围的参数意义:
N-:从第N个字节、字符、字段到结尾;
N-M:从第N个字节、字符、字段到第M个(包括M在内)字节、字符、字段;
-M:从第1个字节、字符、字段到第M个(包括M在内)字节、字符、字段。
参数:可以是字符串,也可以是文件
举栗:
使用-d指定字段分隔符,使用-f获取指定字段
echo "/home/lxy/hhhhh-a.bbb.cc.d" |awk -F/ '{print $NF}'| cut -d'.' -f2
输出为:bbb
echo "/home/lxy/hhhhh-a.bbb.cc.d" | awk -F/ '{print $NF}'|cut -d'.' -f1,2
输出为:/home/lxy/hhhhh-a.bbb
echo "/home/lxy/hhhhh-a.bbb.cc.d" | awk -F/ '{print $NF}'|cut -d'.' -f1,2,3
或echo "/home/lxy/hhhhh-a.bbb.cc.d" | awk -F/ '{print $NF}'|cut -d'.' -f1-3
输出为hhhhh-a.bbb.cc
使用--complement参数提取指定字段以外的字段
echo "/home/lxy/hhhhh-a.bbb.cc.d" | awk -F/ '{print $NF}'|cut -d'.' -f1-3 --complement
输出为 d
使用-c参数获取指定字符范围内的内容
echo "/home/lxy/hhhhh-a.bbb.cc.d" | awk -F/ '{print $NF}'|cut -c5-
h-a.bbb.cc.d