1

我有一个文本文件,其中有类似的内容-

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
4

3 回答 3

3

寻找:

(\d+\.\d+\.\d+\.\d+).*

并替换为:

\1

括号会将正则表达式的那部分捕获到一个变量中,该变量被命名\1(因为它是正则表达式中的第一个捕获块)。该行的其余部分不会被捕获,而是被替换操作简单地丢弃。

于 2013-01-11T01:43:53.903 回答
3

什么都不换\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
$ 
于 2013-01-11T01:45:34.340 回答
0

如果你有 gawk 什么的:

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
于 2013-01-11T01:56:48.457 回答