使用 bash 命令行组合 IP 字符串

Lin*_*ner 5 bash shell-script text-processing

我有一个返回以下内容的命令:

 id1="172" id2="17" id3="136" id4="5" id5="0" />
 id1="172" id2="17" id3="128" id4="2" id5="0" />
 id1="172" id2="17" id3="128" id4="4" id5="0" />
 id1="172" id2="17" id3="128" id4="6" id5="0" />
Run Code Online (Sandbox Code Playgroud)

组合的前四个 ID 代表一个 IP 地址(例如172.17.136.5第一行)。

我想将上述内容通过管道传递给解析命令,该命令将输出一个字符串,其中所有 IP 地址以空格分隔。

对于上面的例子:

myVariable="172.17.136.5 172.17.128.2 172.17.128.4 172.17.128.6"
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Wil*_*ard 6

您可以awk最轻松地使用命令执行此操作:

your-command | awk -F\" -v OFS=. -v ORS=' ' '{print $2, $4, $6, $8}'
Run Code Online (Sandbox Code Playgroud)

要将其设置为变量,请使用命令替换:

myVariable="$(your-command | awk -F\" -v OFS=. -v ORS=' ' '{print $2, $4, $6, $8}')"
Run Code Online (Sandbox Code Playgroud)

-F将输入字段分隔符(默认为任何空格)设置为自定义值;在本例中为双引号 ( ")。

-v允许您设置awk变量。

OFS是输出字段分隔符,默认为单个空格。我们将其设置为一个句点。

ORS是输出记录分隔符,默认为换行符。我们将它设置为一个空格。

然后我们为输入的每一行打印第 2、第 4、第 6 和第 8 个字段。


示例输出:

$ cat temp
 id1="172" id2="17" id3="136" id4="5" id5="0" />
 id1="172" id2="17" id3="128" id4="2" id5="0" />
 id1="172" id2="17" id3="128" id4="4" id5="0" />
 id1="172" id2="17" id3="128" id4="6" id5="0" />
$ myVariable="$(cat temp | awk -F\" -v OFS=. -v ORS=' ' '{print $2, $4, $6, $8}')"
$ echo "$myVariable" 
172.17.136.5 172.17.128.2 172.17.128.4 172.17.128.6 
$ 
Run Code Online (Sandbox Code Playgroud)