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 명령에 모든 것을 할 수 있습니다

# 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#'을하는 백 슬래시의 얽힘을 제거합니다. 더 가깝다.

+0

+1 ascii graphix 마법 – 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 "America/Washington\nPacific/Enderbury" | sed 's;^.*/;;'