egrep中的数字导致一行

巴西拉

我使用egrep输出带有平台名称的某些行:

XXX | egrep "i686-nptl-linux-gnu$|i686-w64-mingw32$|x86_64-unknown-linux-gnu$|x86_64-w64-mingw32$"

[30]    i686-nptl-linux-gnu
[34]    i686-w64-mingw32
[75]    x86_64-unknown-linux-gnu
[77]    x86_64-w64-mingw32

我需要的是:

export PLATNUMS=30,34,75,77

如何将egrep命令通过管道传递到sed / awk / bash脚本?

约翰1024

尝试:

$ command | awk -F'[][ \t]+' '/i686-nptl-linux-gnu$|i686-w64-mingw32$|x86_64-unknown-linux-gnu$|x86_64-w64-mingw32$/{printf "%s%s",(f?",":"export PLATNUMS="),$2; f=1} END{print""}'
export PLATNUMS=30,34,75,77

这个怎么运作

  • -F'[][ \t]+'

    使用任意数量的空格,制表符[]作为字段分隔符。

  • /i686-nptl-linux-gnu$|i686-w64-mingw32$|x86_64-unknown-linux-gnu$|x86_64-w64-mingw32$/{...}`

    对于感兴趣的行,请使用大括号执行命令。

  • printf "%s%s",(f?",":"export PLATNUMS="),$2; f=1

    对于感兴趣的行,请打印我们想要的。

    该变量f标记这是否是第一行。

  • END{print""}

    阅读所有行后,打印换行符。

创建一个shell变量

export PLATNUMS=$(command | awk -F'[][ \t]+' '/i686-nptl-linux-gnu$|i686-w64-mingw32$|x86_64-unknown-linux-gnu$|x86_64-w64-mingw32$/{printf "%s%s",(f?",":""),$2; f=1} END{print""}')

例如,如果文件输入包含您的数据:

$ export PLATNUMS=$(awk -F'[][ \t]+' '/i686-nptl-linux-gnu$|i686-w64-mingw32$|x86_64-unknown-linux-gnu$|x86_64-w64-mingw32$/{printf "%s%s",(f?",":""),$2; f=1} END{print""}' input)
$ declare -p PLATNUMS
declare -x PLATNUMS="30,34,75,77"

对于那些喜欢将命令分散到多行的用户:

export PLATNUMS=$(command | awk -F'[][ \t]+' '
    /i686-nptl-linux-gnu$|i686-w64-mingw32$|x86_64-unknown-linux-gnu$|x86_64-w64-mingw32$/{
        printf "%s%s",(f?",":""),$2
        f=1
    }

    END{
        print""
    }
    ')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章