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)
我怎样才能做到这一点?
您可以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)