我有一个文本文件,其中多个列由制表符分隔,数千行如下:
Foo Bar foo@bar.com 01.01.0001 SomeMoreStuff
现在我想只提取电子邮件,在这种情况下是foo@bar.com
。
使用vim
或任何其他CLI工具删除电子邮件之前和之后的所有内容最简单的方法是什么?
答案 0 :(得分:4)
以下命令将打印第三列:
cut -f3 file_name
答案 1 :(得分:1)
使用 awk ;
awk '$0=$3' file
使用纯 vim
试试这一行:
:%s/.*\t\([^@]\+@[^\t]\+\).*/\1/
如果您确定该电子邮件位于第3列,您还可以尝试:
:%s/\v([^\t]*\t){2}([^\t]+).*/\2/
或使用 vim + awk 如果您愿意:)
:%!awk '$0=$3'
答案 2 :(得分:1)
对于命令行,一个简单的awk将完成这项工作:
awk '{print $3}' inFile
答案 3 :(得分:1)
在Vim中,我将通过使用一个简单的宏来避免出现一个可靠替代的严峻前景。
首先,记录宏:
qq
0
d2f<tab> <-- this is a tab key
f<tab> <-- this is a tab key
D
q
其次,将下面一行的宏应用到缓冲区的末尾:
:+1,$norm @q
答案 4 :(得分:0)
:
while read -a ARRAY; do echo ${ARRAY[2]}; done < input
在awk-mode中perl
perl -lane 'print $F[2]' input