回首頁
修改
Mail
FTP

中




2008年3月15日 星期六

[RE]Grep與ls 延伸應用

常常我們會用ls來查看常用的可能是ls -al 觀看隱藏及詳細資料
那麼如何看的出來是檔案還是目錄~或許你會說看一個屬性的最前面有d就是目錄沒有就是檔案
這樣說也對!那如果只是用ls來查看呢?有些distro能夠秀出深藍色是目錄、白色是檔案
(通常都是系統預設alias='ls --color=auto')所造成的
ls -F 能夠將是目錄的在檔名後面加上一個/,來辨識!

有時在同一個目錄(/etc)下要找一個檔案名為cron*開頭的
但下ls cron* 卻是出現檔案及目錄夾雜的結果

cd /etc
ls -F |grep '^cron'
cron.d/
cron.daily/
cron.hourly/
cron.monthly/
cron.weekly/
crontab

我想上面應該不是我想要的結果
上面列出5個目錄一個檔案,而那個crontab剛好是我要找的
於是我這樣做..

ls -F |grep '^cron' |grep -v '/'
crontab

聰明的你~應該知道為何了吧
在舉一個例子

在/etc底下我要找 rc開頭的目錄不要檔案

ls rc* <--一定不行
ls -dl rc* or ls -d rc* 都可以(這是比較詳細的資料)

精簡的
ls -F |grep rc
inputrc
nanorc
rc.local
rc0.d/
rc1.d/
.....
screenrc
哇!好多!都不是我要的!我要的是目錄且是rc開頭
試試這個
ls -F |grep '^rc'
rc0.d/
rc1.d/
ps: -F是在目錄後面加上/
延申:ls -d ./* |grep '^./rc" <---這樣也行 不過多此一舉!


前面兩個例子:第一個是找檔案,第二個是找目錄
接下來要介紹~精簡列出想要找的隱藏檔案

ls -aF |grep '^\.' |grep -v /
分別解說一下
ls -aF <-- 列出.的隱藏檔(包含目錄)並且在目錄後面加上/
grep '^\.' < ---- 找出以.開頭的檔案或目錄
grep -v / < ----既然找出.開頭的資料就用反向選擇的方式把目錄給移除

這樣就剩下我要的隱藏檔案
此例子是用於一個目錄底下很多隱藏檔跟目錄時比較有用!
應該還有更好的方式~ 只是我暫時沒想到
請各位分享一下!

grep 的-v是 反向選擇的意思 就是有/就移除該列
ps:記的擷取命令指令如cut,grep通常是針對『一行一行』來分析的, 並不是整篇訊息分析的

新增一個例子:
每當我們要用ps aux 查看那一個程式的運作PID時
會用

ps aux |grep 'ssh'
常常會列出兩個
一個是
grep ssh 與
/usr/sbin/sshd
通常會用此方法在移除不要的資訊
ps aux |grep ssh |grep -v grep
ok!


延伸閱讀: 底下有前輩的一些經驗分享


那如何列出所在目錄下的子目錄而不要其他檔案呢?
有了 ls -F 再加個 l 再來個 grep 就可以辦到了
ls -Fl | grep '.*/$'
很好你會用 grep 而且也懂什麼是 RE 和輸出導向
但是有一個更簡單的方法可以達到相同的目的
ls -d */.
是不是更簡單呢?但它包含了一個不是很常用的-d 參數,RE 及 Filesystem 的觀念
有時候一個目錄下面一堆檔案我們會用 ls | less 來分頁,但是就沒有多欄顯示了,怎麼樣才可以概有分頁的功能又可以像正常的ls 一樣分成多個欄位呢?
man ls 你會發現有一個 -C 可以用
ls -C | less 你會發現有什麼不同。
你能了解到 grep 和 egrep 的差異時你又更上一層了。
ls -alhS 列出隱藏檔並排列大小並以人類易懂的方式(例如 GB, KB 等等)列出來
r :將排序結果反向輸出

0 回應: