字段分隔符標誌-F的用法
還記得Linux系統的口令文件嗎?在這個文件中,所有的字段都是以:分隔的。有時可能只想知道某些用戶登錄時使用的shell,可以使用下列組合命令。在這個組合命令中,egrep命令從 /etc/passwd 文件中抽取包含goddog的數據行,之後將egrep命令的結果通過管道送給awk命令。awk命令把冒號看成字段的分隔符並將列出第1個(用戶名)和第7個字段(登錄時的shell),同時還將在顯示結果中加入一些描述信息以幫助閱讀和理解。
goddog@ubuntu:~$ egrep 'goddog' /etc/passwd | awk -F: '{ print $1 " has "$7" as loggin shell." }'
goddog has /bin/bash as loggin shell.
如果有一天,boss問你現在咱們公司Linux系統上最流行的shell是哪個?有多少人在使用這個shell?現在你就完全不用調查所有的用戶了,命令如下:
goddog@ubuntu:~$ awk -F: '{ print $7 }' /etc/passwd | sort | uniq -c
2 /bin/bash
23 /bin/false
1 /bin/sync
16 /usr/sbin/nologin
如果想知道哪些用戶在登錄時是存放在/bin 目錄中以及這個shell的名字,命令如下:
goddog@ubuntu:~$ grep /bin/ /etc/passwd | awk -F: '{ print $1" "$7 }'
root /bin/bash
sync /bin/sync
……
可是在上例中有一個名為sync的用戶使用的是 /bin/sync應用程序。你不想讓他出現在顯示結果中,於是,你對命令進行了修改,將以上命令的結果通過管道送給sed命令,並由sed命令刪除所有包含sync字符串的數據行。命令如下:
goddog@ubuntu:~$ grep /bin/ /etc/passwd | awk -F: '{ print $1" "$7 }' | sed '/sync/d'
root /bin/bash
systemd-network /bin/false
……
雖然去掉了sync用戶的數據行,但是顯示結果卻沒有了順序,因此可以將這個結果通過管道送給sort命令進行排序,命令如下:
goddog@ubuntu:~$ grep /bin/ /etc/passwd | awk -F: '{ print $1 " " $7 }' | sed '/sync/d' | sort
_apt /bin/false
avahi-autoipd /bin/false
……
以上所有例子告訴我們這樣一個事實,那就是編程並不需要一步到位,而是一步步加以完善的。開發大型軟件也是一樣,許多軟件在剛剛發行時,bugs滿天飛,但是廠家照樣賣,然後是一邊賣一邊改進。
今天就分享這麼多了,謝謝欣賞!^_~