2014-10-02 107 views
1

我有一個文件(/ etc/passwd文件)用線的千想:在bash上使用sed將特定的字符串保留在一行中?

nom de login:password:uid:gid:nom en clair:home dir:shell 

我想用sed 's/..etc..

保持「NOM恩克萊爾」字段並刪除其他部分我怎麼能請這麼做?

我在vi使用此表達了這事

:%s#\%([^:]\+:\)\{4}\([^:]\+\).*#\1 
+0

你想要做的替換所有的行呢? – 2014-10-02 14:05:13

回答

4

使用awk

s='nom de login:password:uid:gid:nom en clair: home dir:shell' 
awk -F: '{print $5}' <<< "$s" 
nom en clair 

使用sed

sed 's/^\([^:]*:\)\{4\}\([^:]*\).*$/\2/' <<< "$s" 
nom en clair 
+0

你只需要一個捕獲組... – isedev 2014-10-02 14:08:17

+0

是的,但默認'sed'不支持非捕獲組。 – anubhava 2014-10-02 14:09:38

+0

謝謝,但我絕對必須使用sed .. – user3568611 2014-10-02 14:09:41

相關問題