在IP地址后替换文本文件中的所有内容

时间:2013-01-11 01:39:16

标签: regex notepad++

我有一个文本文件,我有这样的东西 -

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

3 个答案:

答案 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