問題:
路徑名為 /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”選項連用,不分割多字節字符;
- -s:不打印不包含分割符的行
- --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 | 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 |
-s:不打印不包含分割符的行 | cat aa.txt aadbdg_arv aavf nrra_rr+rr_ee cut -s -d'_' -f1- aa.txt |
aadbdg_arv nrra_rr+rr_ee |
--out-delimiter=<字段分隔符>:指定輸出內容的字段分割符 | echo "/home/lxy/hhhhh-a.bbb.cc.d" | awk -F/ '{print $NF}'|cut -d'.' --output-delimiter=* -f1-3
|
hhhhh-a*bbb*cc |