0

我有一个文本文件,其中包含由制表符分隔的几列,并且有数千行是这样的:

Foo  Bar  foo@bar.com  01.01.0001  SomeMoreStuff

现在我想只提取电子邮件,foo@bar.com在这种情况下。

vim使用或任何其他 CLI 工具删除电子邮件前后的所有内容最简单的方法是什么?

4

5 回答 5

4

以下命令将打印第三列:

cut -f3 file_name
于 2013-04-15T20:36:39.100 回答
1

使用awk

awk '$0=$3' file

使用纯vim

试试这一行:

:%s/.*\t\([^@]\+@[^\t]\+\).*/\1/

如果您确定电子邮件位于第 3 列,您也可以尝试:

:%s/\v([^\t]*\t){2}([^\t]+).*/\2/

或者如果你喜欢使用vim + awk :)

:%!awk '$0=$3' 
于 2013-04-15T20:33:37.227 回答
1

对于命令行,一个简单的 awk 就可以完成这项工作:

awk '{print $3}' inFile
于 2013-04-15T20:34:33.417 回答
1

在 Vim 中,我可以通过使用一个简单的宏来避免不得不提出可靠替换的严峻前景。

首先,录制宏:

qq
0
d2f<tab> <-- this is a tab key
f<tab>   <-- this is a tab key
D
q

其次,将下面一行中的宏应用到缓冲区的末尾:

:+1,$norm @q
于 2013-04-15T20:40:37.090 回答
0

在 bash 中:

while read -a ARRAY; do echo ${ARRAY[2]}; done < input

perl 在 awk 模式下

perl -lane 'print $F[2]' input
于 2013-04-15T20:38:29.923 回答