2017-02-01 33 views
0

我正在閱讀/ etc/shadow文件,並刪除第二個字段中的任何值等於*或!並且第五個字段中的任何內容都不等於90,然後打印第1個字段,第5個字段和第6個字段,並在每行末尾添加主機名並將其輸出到文件。我不知道我的最佳選擇是什麼在這裏的..../etc/shadow文件Linux中的最佳命令,以匹配數據,然後打印某些數據

例如

foo:$6$91s00atqlok0b861$7IJdhycBWBwipe82y6kaoXnAbwqhJNPyxXIiWzCFpb0um2aEquBKIaH5OAlGRAeua2F6jk6qQiicpC21aiTvt.:12345:7:90:7:30:: 
foofoo:!!:123456:0:90:7::: 
foofoofoo:$6$5WSZ.Gde$RGkaObncaycypz9.wnerXauAPyIqyDQzh9cyUPuZ4LiNfRDGIS5DasngA5x51HPczH9NsE8mvkClIOs7a1K3p0:1234:0:99999:7::: 

輸出

foofoofoo, 99999, 7, hostname 

Field1=username
Field2=password
Field5=# days p/w needs to be changed
Field6=# of days to warn

多感謝

+3

'awk'是你的朋友。 – codeforester

+1

awk。只需用'/ etc/shadow'和預期的輸出來更新你的問題。 –

+1

閱讀更多在[標籤:awk]標籤信息頁面:https://stackoverflow.com/tags/awk/info –

回答

2

如果我正確地得到了你的問題,這是你正在尋找的東西:

awk -v hostname=$(hostname) -F: '{ if ($2 != "*" && $2 != "!" && $5 == "90") { printf("%s %s %s %s\n", $1, $5, $6, hostname)}}' /etc/shadow >output 
+0

沒有任何輸出。我在帖子中添加了更多我正在尋找的細節。謝謝 – lorrie82

+0

好吧,這是完美的,只是想我需要。非常感謝@sergeynik – lorrie82

0

如果你真的想,你可以做到這在bash,以及:

IFS=: 
cat /etc/shadow | 
while read f1 f2 f3 f4 f5 f6 f7 ; do 
    echo -n "$f1, $f5, $f6, " 
    hostname 
done 
相關問題