【问题标题】:Linux Grep Probably Simple AnswerLinux Grep 可能很简单的答案
【发布时间】:2011-12-25 09:37:23
【问题描述】:

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

我运行的命令:

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

这将返回地区和国家的列表:

America/Washington
Pacific/Enderbury

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

Pacific/Somewhere/A等一些情况。我有一个应该可以工作的正则表达式([^/]+$),但它没有。有什么想法吗?

【问题讨论】:

    标签: linux bash terminal awk grep


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:
      sed s:.*/:: /usr/share/zoneinfo/zone.tab
      

      【讨论】:

        【解决方案3】:
        awk '!/^#/ { print $3;} ' < /usr/share/zoneinfo/zone.tab   | awk -F/ ' { print $NF; }'
        

        【讨论】:

          【解决方案4】:

          您也可以在一个 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
          

          【讨论】:

            【解决方案5】:

            这个正则表达式可能有效:

            # 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#' 消除了反斜杠的纠结更清晰。

            【讨论】:

              猜你喜欢
              • 2016-07-19
              • 2022-01-25
              • 1970-01-01
              • 2014-04-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多