2008-12-05 62 views
2

我有一個文件每行有一個條目。每一行的格式如下:解析bash中的一行

"group:permissions:users" 

權限和用戶可能會對用逗號這樣分開超過一個值:

"grp1:create,delete:yo,el,ella" 

我想要的是返回如下:

yo 
el 
ella 

這是我到目前爲止:

cat file | grep grp1 -w | cut -f3 -d: | cut -d "," -f 2 

這會返回yo,el.ella,我怎樣才能讓它每行返回一個值?

回答

7

您可以用awk,與使用-f選項:作爲字段分隔符:

[[email protected]]$ echo "grp1:create,delete:yo,el,ella" | awk -F ':' '{print $3}' 
yo,el,ella 

,將讓你只是用戶的字符串,以逗號分隔。然後你可以用這個字符串做任何你想要的。如果你想從字面上打印每個用戶每行一個,你可以使用TR與換行符替換逗號:

[[email protected]]$ echo "grp1:create,delete:yo,el,ella" | awk -F ':' '{print $3}' | tr ',' '\n' 
yo 
el 
ella 
+0

感謝你,就行了。它從來沒有越過我的明王朝使用awk ....再次感謝 – 2008-12-05 23:46:33

1

這裏有一種方法完全做一個shell腳本。你只需要改變IFS讓它在正確的字符上打破「單詞」。注意:這不會處理轉義(例如某些文件格式的「:」)。

這是寫入允許你這樣做:

cat file | name-of-script 

腳本:

#!/bin/bash 
while IFS=: read group permissions users; do 
    if [ "$group" = "grp1" ]; then 
    IFS=, 
    set -- $users 
    while [ $# -ne 0 ]; do 
     echo $1 
     shift 
    done 
    fi 
done