我有一个IP文件,每一行都有两个或三个逗号分隔的IP,例如-
ip x 171.48.179.64, 194.88.105.83, 10.121.15.191
ip x 122.176.17.76, 194.88.105.83, 10.121.15.191
ip x 223.179.196.169, 10.121.15.135
ip x 157.41.161.64, 10.121.15.135
ip x 49.14.160.119, 10.121.15.191
ip x 157.41.230.108, 10.121.15.191
ip x 101.208.189.88, 194.88.105.83, 10.121.15.191
ip x 180.215.137.150, 194.88.105.83, 10.121.15.191
ip x 157.41.161.64, 10.121.15.191
ip x 157.41.161.64, 10.121.15.191
所以我想对包含两个逗号(三个IP)的行进行grep表示-
ip x 171.48.179.64, 194.88.105.83, 10.121.15.191
ip x 122.176.17.76, 194.88.105.83, 10.121.15.191
ip x 101.208.189.88, 194.88.105.83, 10.121.15.191
ip x 180.215.137.150, 194.88.105.83, 10.121.15.191
我搜索了很多,但没有得到任何具体答案,请帮助我。
答案 0 :(得分:4)
您可以使用awk
:
awk -F, 'NF==3' file
-F,
将分隔符设置为,
。 NF
是一个特殊的变量,其中包含字段数。如果满足条件NF==3
,awk将打印当前行。
使用(e)grep会是这样的:
grep -E '^([^,]+,){2}[^,]+$' file
我个人会使用awk,因为它更具可读性。
答案 1 :(得分:1)
如果您还有其他行,这些行可能还包含IP以外的任何内容,那么下面的内容可能会帮助您检查字段数,并确保第1、2和3rd个字段没有其他IP。
awk -F, 'NF==3 && \
$1 ~ /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/ && \
$2 ~ /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/ && \
$3 ~ /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/' Input_file
答案 2 :(得分:0)
你也可以使用循环
while read -r line
do
count=${line//[^,]};
if [ ${#count} == 2 ];
then
echo "${line}";
fi
done < your.file