Linux Grep可能简单的答案

时间:2011-11-09 15:05:58

标签: linux bash terminal awk grep

我正在使用zone.tab下的/usr/share/zoneinfo/zonetab,我无法以特定格式显示数据。

我跑的命令:

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

这会返回一个区域和条目列表:

America/Washington
Pacific/Enderbury

我需要的是上面的内容在每一行的最后/之后返回所有内容。

在某些情况下,例如Pacific/Somewhere/A。我有一个正则表达式([^/]+$)应该可以工作,但事实并非如此。有什么想法吗?

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

将输出传输到sed -e 's;^.*/;;'。例如,

echo -e "America/Washington\nPacific/Enderbury" | sed 's;^.*/;;'

答案 2 :(得分:1)

sed s:.*/:: /usr/share/zoneinfo/zone.tab

答案 3 :(得分:1)

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

答案 4 :(得分: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#'更清楚。