突然發現 cut 的好用, 來做 Linux (Unix) 基本指令介紹, 也當做筆記來用~~
cut 有三個參數:
- -c list: 一段範圍清單, 以','隔開, 直列切割(ex: 1,3,5-10,33)
- -d delim: 可以設中間間隔符號要哪種, 預設是tab分隔切割, 通常會搭配 -f(決定要取切割欄位的哪欄)
- -f list: 以欄位為主, 作剪下的動作, list 是欄位編號或一段範圍的清單(類同 -c 參數)
cut 使用範例:
-d, -f: 拉 passwd 檔 第1欄和第5欄(用 : 分隔)
$ cut -d : -f 1,5 /etc/passwd
root:root
sys:sys
abc:ABC Lee
...
-d, -f: 一樣拉 passwd 檔, 用 : 分隔, 只拉第 6 欄
$ cut -d : -f 6 /etc/passwd
/root
/dev
...
-d, -f: 一樣拉 passwd 檔, 用 : 分隔, 拉第 1~3欄
$ cut -d: -f1-3 /etc/passwd
root:x:0
daemon:x:1
...
-c: 直的剪下來, 直的剪 1-10個字(很常用, 就是為了這個指令寫這篇.. XD)
$ ls -l | cut -c 1-10
total 201
drwxr-xr-x
drwxr-xr-x
-rw-r--r--
-rw-r--r--
awk 的作法:
$ awk -F: ' { print $1, $5 }' /etc/passwd
$ awk -F: -v 'OFS=:' '{ print $1, $5}' /etc/passwd (-v 是設 OFS變數, OFS=中間間隔要用何種符號秀出來)
$ awk -F: '{ print $1":"$5}' /etc/passwd
$ ls -l | awk '{ print $1 }'
$ ls -l | awk '{ print $1, $3}'
我都這樣在 sh script 裡,抓 SVN 的 rev/date 資料:
__revision=`echo '$Rev: 112 $' | cut -d' ' -f2`;
__rev_date=`echo '$Date: 2006-11-27 16:26:10 +0800 (Tue, 27 11 2006) $' | cut -d' ' -f2`;
感謝大師提供使用案例~~ m(_ _)m
awk 的作法:
$ls -l | awk '{ pinrt $1 }'
^^^^^ 錯字
感謝指正~~~ 已修復~~~ 🙂