运行 管道 bash 脚本

Running piped bash script

我需要将我的 bash 脚本 (output.sh) 作为管道脚本执行。 见下文。

echo "Dec 10 03:39:13 cgnat2.dd.com 1 2015 Dec 9 14:39:11 01-g3-adsl - - NAT44 - [UserbasedW - 100.70.24.236 vrf-testnet - 222.222.34.65 - 3072 4095 - - ][UserbasedW - 100.70.25.9 vrf-testnet - 222.222.34.65 - 16384 17407 - - ][UserbasedW - 100.70.25.142 vrf-testnet - 222.222.34.69 - 9216 10239 - - ]" | ./output.sh

如何将回显文本放入我的 output.sh 文件中,我需要使用 [

拆分回显文本

输出应该是

[UserbasedW - 100.70.24.236 vrf-testnet - 222.222.34.65 - 3072 4095 - - ] [UserbasedW - 100.70.25.9 vrf-testnet - 222.222.34.65 - 16384 17407 - - ] [UserbasedW - 100.70.25.142 vrf-testnet - 222.222.34.69 - 9216 10239 - - ]

请帮帮我。我不知道..:(

如果它在第一个 [ 之前删除 header,请在你的管道之前使用 sed(假设你的 echo 是其他来源的样本)

echo "Dec 10 03:39:13 cgnat2.dd.com 1 2015 Dec 9 14:39:11 01-g3-adsl - - NAT44 - [UserbasedW - 100.70.24.236 vrf-testnet - 222.222.34.65 - 3072 4095 - - ][UserbasedW - 100.70.25.9 vrf-testnet - 222.222.34.65 - 16384 17407 - - ][UserbasedW - 100.70.25.142 vrf-testnet - 222.222.34.69 - 9216 10239 - - ]" \
 | sed 's/^[^[]*//' \
 | ./output.sh

使用 grep:

| grep -o '\[[^]]*\]'

或使用 GNU grep:

| grep -oP '\[.*?\]'

输出:

[UserbasedW - 100.70.24.236 vrf-testnet - 222.222.34.65 - 3072 4095 - - ]
[UserbasedW - 100.70.25.9 vrf-testnet - 222.222.34.65 - 16384 17407 - - ]
[UserbasedW - 100.70.25.142 vrf-testnet - 222.222.34.69 - 9216 10239 - - ]

使用 bash 脚本(例如 output.sh):

#!/bin/bash
grep -o '\[[^]]*\]'

用法:

echo "... your string ..." | ./output.sh

参见:The Stack Overflow Regular Expressions FAQ