我有一个输出文件:
abis02 - GBS API 8085 is running abis02 - GBS API 8180 is running abis - GBS API 8181 is running我只想得到端口号(8085,8180,8181),端口号可以是随机的,我只需要提取它们。
我试着用这个:
b=$(echo $abis02 | sed 's/[^0-9]\{4\}//g') 但我得到了这个:
c02PI 8085[00;32sc02PI 8180[00;32sc02PI 8181[0m怎么才能得到端口号呢?
发布于 2021-05-27 16:30:38
echo 'abis02 - GBS API 8085 is running abis02 - GBS API 8180 is running abis - GBS API 8181 is running' | grep -Eo '\b[0-9]{4}\b'
8085
8180
8181发布于 2021-05-27 16:56:47
这不需要sed;bash的内置字符串操作足以执行任务。
#!/usr/bin/env bash
string='abis02 - GBS API 8085 is running abis02 - GBS API 8180 is running abis - GBS API 8181 is running'
ports=( )
while [[ $string =~ ([[:digit:]]{4})(.*) ]]; do
ports+=( "${BASH_REMATCH[1]}" )
string=${BASH_REMATCH[2]}
done
echo "Found ports:" "${ports[@]}"...properly作为输出发出:
Found ports: 8085 8180 8181发布于 2021-05-27 17:06:38
还可以使用带空白的awk作为记录分隔符,并将行提要用作输出记录分隔符:
s='abis02 - GBS API 8085 is running abis02 - GBS API 8180 is running abis - GBS API 8181 is running'
awk 'BEGIN{RS="[[:space:]]";ORS="\n"} /^[0-9]{4}$/' <<< "$s"见在线演示,屈服
8085
8180
8181只有那些记录的输出完全匹配一个四位数字符串。
https://stackoverflow.com/questions/67726246
复制相似问题