2011-11-09 8 views
0

私はzone.tabの下で/usr/share/zoneinfo/zonetabの下で作業しており、特定の形式でデータを表示するのに問題があります。Linux Grepおそらく簡単回答

私は実行コマンド:

cat zone.tab | awk '!/#/ {print $3}' | sort 

これは、地域のリストを返し、contries:上記は、各行の最後/後、すべてを返すようにするために

America/Washington 
Pacific/Enderbury 

私は必要なものです。

Pacific/Somewhere/Aなどの場合があります。私は正規表現([^/]+$)が動作するはずですが、そうではありません。何か案は?

答えて

5

はまた、それ単一awkのコマンドですべてを行うことができますバックスラッシュのもつれを取り除くcより低い。

+0

+1 for ascii graphix wizardry – user237419

1

出力をsed -e 's;^.*/;;'にパイプします。

awk '!/^#/ { sub(".*/", "", $3); print $3 }' /usr/share/zoneinfo/zone.tab 
    ---- ----------------- -------- 
     |     |   | 
    for non-comment lines  |   | 
          |   | 
        modify 3rd col | 
        leaving only text | 
        after last slash | 
             | 
           Then print modified 3rd col 
+0

チケットは、その命を救う人のために歓声をあげる。 – TheMonkeyMan

1
sed s:.*/:: /usr/share/zoneinfo/zone.tab 
1
awk '!/^#/ { print $3;} ' < /usr/share/zoneinfo/zone.tab | awk -F/ ' { print $NF; }' 
1

この正規表現はうまくいくかもしれない:

# echo -e "a\n\a/b\na/b/c\na/b/c/d\n" |sed 's#^\(\([^/]*/\)*\)\(.*\)#\3#' 
a 
b 
c 
d 

おそらくsed -r 's#^(([^/]*/)*)(.*)#\3#'例えば、

echo -e "America/Washington\nPacific/Enderbury" | sed 's;^.*/;;' 
関連する問題