代码之家  ›  专栏  ›  技术社区  ›  Lucil120

使用grep仅打印整行中的图案

  •  2
  • Lucil120  · 技术社区  · 8 年前

    据我所知,使用grep-o命令只打印图案。 我有一个这样的文件:

    Job <472971> Job Name <aaaaaaaaaaa> User <bbbbbbbbb> Project <cccccc> Status <RUN> Queue <AL_Ptime>Interactive pseudo-terminal shell mode Submitted from host <lsf_login07> CWD </asdfghjklll/dsadasd/asda>
    

    我想把里面所有的图案都打印出来 < > ,我的欲望输出如下:

    <472971> <aaaaaaaaaaa> <bbbbbbbbb> <cccccc> <RUN> <AL_Ptime> <lsf_login07> </asdfghjklll/dsadasd/asda>
    

    <&燃气轮机; .

    谢谢你的帮助!

    1 回复  |  直到 8 年前
        1
  •  1
  •   Marc Lambrichs user8588010    8 年前

    类似于 grep -oE '<[^>]+>' :

    $ echo "Job <472971> Job Name <aaaaaaaaaaa> User <bbbbbbbbb> Project <cccccc> Status <RUN> Queue <AL_Ptime>Interactive pseudo-terminal shell mode Submitted from host <lsf_login07> CWD </asdfghjklll/dsadasd/asda>" \
    | grep -oE '<[^>]+>'
    <472971>
    <aaaaaaaaaaa>
    <bbbbbbbbb>
    <cccccc>
    <RUN>
    <AL_Ptime>
    <lsf_login07>
    </asdfghjklll/dsadasd/asda>
    

    如果您想去掉换行符并在换行符之间留有空格,可以通过管道将其转换为一个简单的 awk公司 这样地:

    grep -oE '<[^>]+>' |  awk '{printf "%s%s", (NR==1?"":" "), $0}'
    

    或与 tr公司

    grep -oE '<[^>]+>' | tr "\n" " "
    

    假设OP使用一个包含许多这样的行的输入文件,可以使用GNU awk公司 :

    $ cat tst.awk
    BEGIN { FPAT="<[^>]+>" }
    { for (i=1; i<=NF; i++) printf "%s%s", (i==1?"":" "), $i
      printf "\n"
    }
    

    使用它:

    awk -f tst.awk file
    

    其中文件是:

    $ cat file
    Job <472971> Job Name <aaaaaaaaaaa> User <bbbbbbbbb> Project <cccccc> Status <RUN> Queue <AL_Ptime>Interactive pseudo-terminal shell mode Submitted from host <lsf_login07> CWD </asdfghjklll/dsadasd/asda>
    Job <472971> Job Name <aaaaaaaaaaa> User <bbbbbbbbb> Project <cccccc> Status <RUN> Queue <AL_Ptime>Interactive pseudo-terminal shell mode Submitted from host <lsf_login07> CWD </asdfghjklll/dsadasd/asda>
    

    $ awk 'BEGIN{FPAT="<[^>]+>"} \
            {for (i=1; i<=NF; i++) printf "%s%s", (i==1?"":" "), $i; printf "\n"}' file
    <472971> <aaaaaaaaaaa> <bbbbbbbbb> <cccccc> <RUN> <AL_Ptime> <lsf_login07> </asdfghjklll/dsadasd/asda>
    <472971> <aaaaaaaaaaa> <bbbbbbbbb> <cccccc> <RUN> <AL_Ptime> <lsf_login07> </asdfghjklll/dsadasd/asda>