Text-Processing
列印/etc/passwd的一些欄位
我有一個關於在 Linux 中使用萬用字元的問題。在這裡,我從 /etc/passwd 文件中的一長串列中找到了一些行。
root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh ...
什麼是和適當的命令/命令僅從該行列印出使用者名、UID 號和 GID 號(如果可能顯示多種方式,以便我可以進一步探索)?
不需要“萬用字元”或正則表達式的一種方法是使用
cut
.cut
可以處理文本文件中指定字元分隔的行,這/etc/passwd
恰好是。cut -d: -f1,3,4 /etc/passwd
輸出將具有以冒號分隔的欄位。看起來 GNU
cut
有一個額外的選項“–output-delimiter”,但你也可以使用tr
:cut -d: -f1,3,4 /etc/passwd | tr ':' '\t'
像這樣工作的選項
cut
:
-d:
- 使用冒號作為欄位分隔符。預設為選項卡。-f1,3,4
- 輸出欄位編號 1、3 和 4。cut
使用 1 索引欄位,從行的左側開始。欄位 2 將是“x”,過去出現過加密密碼。該
awk
命令也可以工作:awk -F : '{print $1, $3, $3}' /etc/passwd
該
-F :
選項告訴awk
使用冒號分隔欄位。awk
將一行中的欄位稱為 $ 1, $ 2, $ 3 … from left to right. $ 0 包含整行,這通常是您要列印的內容,但這次不是。
sed
可以這樣做:sed 's/^\([^:]*\):\([^:]*\):\([^:]*\):\([^:]*\):..*/\1 \3 \4/' /etc/passwd
在
sed
命令中,我們終於得到了“萬用字元”,儘管在這種情況下它們看起來很難看。我的建議是更喜歡這個
cut
命令。該sed
範例表明,獲取您想要的內容的正則表達式可能很醜陋,因此很難獲得正確。awk
可以做更多cut
的事情,awk
因為預設情況下使用空格來分隔標記。這可以節省擺弄cut
欄位分隔符規範的時間。