2011-11-09 73 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命令:

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

+1 ascii graphix wizardry – user237419

1

將輸出輸出到sed -e 's;^.*/;;'。例如,

echo -e "America/Washington\nPacific/Enderbury" | sed 's;^.*/;;' 
+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#'這消除反斜槓的糾結是c learer。