我尝试从不同字符串的IP地址中获取最后2个八位字节。 其中一些语法如下:
ABCD_192.192.111.123 or
ABCD_EFG_192.111.123.192
我该如何以通用方式仅从IP字符串的前半部分+ 2个最后八位组进行grep?例如:
ABCD_111.123 or
ABCD_EFG_123.192
现在我只能获得IP
此外,我需要避免使用临时文件。
答案 0 :(得分:0)
如果您对awk
表示满意,请尝试以下。
awk '{sub(/[0-9]+\.[0-9]+\./,"")} 1' Input_file
答案 1 :(得分:0)
所以,我不确定您的数据,但这
$ 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/\.$/\"/'
答案 2 :(得分:0)
perl -n -e 'while(/^([^0-9]+).*\.([0-9]+\.[0-9]+)/g) {print "$1$2\n"}'
答案 3 :(得分:0)
使用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"