如何从 Bash 中的字符串中提取部分 IP 地址
How to extract part of IP address from string in Bash
我尝试从不同字符串的 IP 地址中获取最后 2 个八位字节。
其中一些语法如下:
ABCD_192.192.111.123 or
ABCD_EFG_192.111.123.192
我如何以通用方式 grep 只有字符串的第一部分 + 来自 IP 的最后 2 个八位字节?例如:
ABCD_111.123 or
ABCD_EFG_123.192
现在只能获取IP
此外,我需要避免使用临时文件。
如果您觉得awk
没问题,请您尝试关注一下。
awk '{sub(/[0-9]+\.[0-9]+\./,"")} 1' Input_file
所以,我不确定你的数据,但是这个
$ echo '*"ABCD_192.192.111.123"
*"ABCD_EFG_192.111.123.192"' \|
grep -o '\*\"\([A-Z]*_\)*\([0-9]*.\)\{2\}'
生成此输出,现在如果需要,您可以通过管道传输到 sed
以用 "
.
替换最后一个点
*"ABCD_192.192.
*"ABCD_EFG_192.111.
sed 's/\.$/\"/'
.
所以你可以试试:
grep -o '\*\"\([A-Z]*_\)*\([0-9]*.\)\{2\}' | sed 's/\.$/\"/'
perl -n -e 'while(/^([^0-9]+).*\.([0-9]+\.[0-9]+)/g) {print "\n"}'
使用Bash拆分字符串:
string="ABCD_192.192.111.123"
IFS=_. read -r prefix octet1 octet2 octet3 octet4 <<< "$string"
printf '%s_%s.%s\n' "$prefix" "$octet3" "$octet4"
改用这个两步版本。它可以处理带有一个或多个下划线的前缀:
string="ABCD_EFG_192.192.111.123"
IFS=. read -r prefix_octet1 octet2 octet3 octet4 <<< "$string"
prefix=${prefix_octet1%_*}
printf '%s_%s.%s\n' "$prefix" "$octet3" "$octet4"
我尝试从不同字符串的 IP 地址中获取最后 2 个八位字节。 其中一些语法如下:
ABCD_192.192.111.123 or
ABCD_EFG_192.111.123.192
我如何以通用方式 grep 只有字符串的第一部分 + 来自 IP 的最后 2 个八位字节?例如:
ABCD_111.123 or
ABCD_EFG_123.192
现在只能获取IP
此外,我需要避免使用临时文件。
如果您觉得awk
没问题,请您尝试关注一下。
awk '{sub(/[0-9]+\.[0-9]+\./,"")} 1' Input_file
所以,我不确定你的数据,但是这个
$ echo '*"ABCD_192.192.111.123"
*"ABCD_EFG_192.111.123.192"' \|
grep -o '\*\"\([A-Z]*_\)*\([0-9]*.\)\{2\}'
生成此输出,现在如果需要,您可以通过管道传输到 sed
以用 "
.
*"ABCD_192.192.
*"ABCD_EFG_192.111.
sed 's/\.$/\"/'
.
所以你可以试试:
grep -o '\*\"\([A-Z]*_\)*\([0-9]*.\)\{2\}' | sed 's/\.$/\"/'
perl -n -e 'while(/^([^0-9]+).*\.([0-9]+\.[0-9]+)/g) {print "\n"}'
使用Bash拆分字符串:
string="ABCD_192.192.111.123"
IFS=_. read -r prefix octet1 octet2 octet3 octet4 <<< "$string"
printf '%s_%s.%s\n' "$prefix" "$octet3" "$octet4"
改用这个两步版本。它可以处理带有一个或多个下划线的前缀:
string="ABCD_EFG_192.192.111.123"
IFS=. read -r prefix_octet1 octet2 octet3 octet4 <<< "$string"
prefix=${prefix_octet1%_*}
printf '%s_%s.%s\n' "$prefix" "$octet3" "$octet4"