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