linux cut的用法


問題:

路徑名為 /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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM