Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 以regex(IP地址)开头的Awk打印行_Linux_Bash_Shell_Awk_Sed - Fatal编程技术网

Linux 以regex(IP地址)开头的Awk打印行

Linux 以regex(IP地址)开头的Awk打印行,linux,bash,shell,awk,sed,Linux,Bash,Shell,Awk,Sed,我正在尝试读取那些在第一列有IP地址的行的文件 下面的命令不返回任何值 cat test.csv | awk '$1 == "^[[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}]" { print $0 }' 正则表达式可以捕获IP地址 也试过下面的 cat test_1.csv | awk '$1~/^[[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\]/ {print $

我正在尝试读取那些在第一列有IP地址的行的文件

下面的命令不返回任何值

cat test.csv | awk '$1 == "^[[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}]" { print $0 }'
正则表达式可以捕获IP地址

也试过下面的

cat test_1.csv | awk '$1~/^[[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\]/ {print $0}'
test.csv

1.1.1.1 ipaddress gateway
2.2.2.2 ipaddress_2 firewall
www.google.com domain google

使用
grep
,您可以更轻松地执行此操作:

grep -P '^\d+(\.\d+){3}\s' test.csv


使用
grep
,您可以更轻松地执行此操作:

grep -P '^\d+(\.\d+){3}\s' test.csv


在GNU
awk
中使用
{1,3}
(区间表达式)时,必须使用
--re Interval
(或)
--posix
选项来启用它

使用:

(或)

man awk

r{n,m}

大括号内的一个或两个数字表示区间表达式。 仅当--posix--在命令行上指定重新间隔


在GNU
awk
中使用
{1,3}
(区间表达式)时,必须使用
--re Interval
(或)
--posix
选项来启用它

使用:

(或)

man awk

r{n,m}

大括号内的一个或两个数字表示区间表达式。 仅当--posix--在命令行上指定重新间隔



使用正则表达式操作符
~
匹配正则表达式。不是
==
。另外,
awk
可以从文件中读取输入。您不需要使用
cat
。只需
awk'$1~/^regex/”文件
发布输入和输出的最小示例。为什么要在regex周围放置
[…]
?这可能没有达到您在这里希望的效果。@sat关于
=
是正确的,@EricRenouf关于
[…]
是正确的,并且您还缺少最后一个
}
。显然,您应该尝试一个更简短的regexp,然后将其构建为长的regexp。使用regex操作符
~
来匹配regex。不是
==
。另外,
awk
可以从文件中读取输入。您不需要使用
cat
。只需
awk'$1~/^regex/”文件
发布输入和输出的最小示例。为什么要在regex周围放置
[…]
?这可能没有达到您在这里希望的效果。@sat关于
=
是正确的,@EricRenouf关于
[…]
是正确的,并且您还缺少最后一个
}
。显然,您应该尝试一个更简短的regexp,然后将其扩展到那个长的regexp。是否有一些设置可以启用其中一个或两个选项?在
GNU Awk 4.1.3
…@spasic上没有任何选项都可以正常工作,它在
GNU Awk 3.1.8
上不工作。在
GNU Awk 4
上,它可能已启用。哦,好的。。在GNU awk 3.1.8上有/没有这些选项的情况下,
awk'/^[0-9]{1,3}(\.[0-9]{1,3}){3}\s/'文件
工作吗?@spasic,它将只在
GNU awk 3.1.8
上使用这些选项。顺便说一句,您的regexp缺少结尾的
$
,可以缩写为
$1~/[0-9]{1,3}{$/
是否存在启用其中一个或两个选项的设置?在
GNU Awk 4.1.3
…@spasic上没有任何选项都可以正常工作,它在
GNU Awk 3.1.8
上不工作。在
GNU Awk 4
上,它可能已启用。哦,好的。。在GNU awk 3.1.8上有/没有这些选项的情况下,
awk'/^[0-9]{1,3}(\.[0-9]{1,3}){3}\s/'文件
工作吗?@spasic,它将只在
GNU awk 3.1.8
上使用这些选项。顺便说一句,您的regexp缺少结尾的
$
,可以缩写为
$1~/[0-9]{1,3}{$/
不确定这是否会过滤ip地址,那么1.1.1.300呢?使用grep并不容易,而且这只适用于GNU grep,而
awk'$1~/^[0-9]{1,3}(\.[0-9]{1,3}$/'test.csv
将适用于任何POSIX awk。不确定这是否会过滤ip地址,那么1.1.1.300呢?使用grep并不容易,这只适用于GNU grep,而
awk'$1~/^[0-9]{1,3}(\.[0-9]{1,3}){3}$/'test.csv
将适用于任何POSIX awk。
awk --posix '$1 ~ /^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/' file
awk --re-interval '$1 ~ /^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/' file