我有一个文本文件,我有这样的东西 -
10.2.57.44 56538154 3028
120.149.20.197 28909678 3166
10.90.158.161 869126135 6025
在该文本文件中,我有大约400,000行,与上面完全相同。我在Notepad ++中打开了相同的文本文件。我需要一种方法来删除该文本文件中的所有内容,只留下IP地址(上面文本文件中的第一列是IP地址)。我想,我可以使用正则表达式来做到这一点。而notepad ++也可以选择使用正则表达式。但不确定我需要使用的正则表达式。任何人都可以帮助我吗?
所以输出应该是这样的 -
10.2.57.44
120.149.20.197
10.90.158.161
答案 0 :(得分:3)
查找
(\d+\.\d+\.\d+\.\d+).*
并替换为:
\1
括号将正则表达式的那一部分捕获到一个名为\1
的变量(因为它是正则表达式中的第一个捕获块)。该行的其余部分未被捕获,但被替换操作简单地抛出。
答案 1 :(得分:2)
只需替换\s.*
即可!正则表达式只需要匹配它需要匹配的东西,你想要匹配的是一个后跟任何东西的空格(因此只留下IP地址,因为它启动了行并且没有空格)
或者,如果你有它们,使用传统的Unix命令可以做得更好:
sed -i 's/\s.*//' thefile
示例:
$ cat <<EOF | sed 's/\s.*//'
> 10.2.57.44 56538154 3028
> 120.149.20.197 28909678 3166
> 10.90.158.161 869126135 6025
> EOF
10.2.57.44
120.149.20.197
10.90.158.161
$
答案 2 :(得分:0)
如果你有傻瓜或其他东西:
gawk "{print $1}" filename
在linux(bash)中,awk
的使用情况如下所示:
suku@ubuntu-vm:~$ cat stack
10.2.57.44 56538154 3028
120.149.20.197 28909678 3166
10.90.158.161 869126135 6025
suku@ubuntu-vm:~$ cat stack | awk '{ print $1 }'
10.2.57.44
120.149.20.197
10.90.158.161