gpt4 book ai didi

grep - grep 中的数字导致一行

转载 作者:行者123 更新时间:2023-12-05 00:49:50 30 4
gpt4 key购买 nike

我使用 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 脚本?

最佳答案

尝试:

$ 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""
}
')

关于grep - grep 中的数字导致一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47955179/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com