我有一个如下所示的文件:
[email protected] [email protected] 100.0.9.181
[email protected] [email protected] 100.1.147.27
[email protected] [email protected] 100.32.40.7
[email protected] [email protected] [email protected] 101.0.7.77
[email protected] 101.100.177.191
[email protected] [email protected] [email protected] 101.17.155.18
[email protected] 101.174.11.146
[email protected] 101.174.2.218
我想使用sed
(或awk
) 来操作文件,以便删除第一个空格之后直到(但不包括之前的空格)第一次出现的数字的所有内容。因此上面的内容最终会看起来像这样:
[email protected] 100.0.9.181
[email protected] 100.1.147.27
[email protected] 100.32.40.7
[email protected] 101.0.7.77
[email protected] 101.100.177.191
[email protected] 101.17.155.18
[email protected] 101.174.11.146
[email protected] 101.174.2.218
我试过了:
sed '/\s.*$\([0-9]\)/\1/g' <filename>
sed '/\s.*$/,/0-9/p' <filename>
sed '/\s.*$/,/\(\[0-9\]\)/p' <filename>
以及我在网络上找到的许多其他示例组合。我认为问题可能是有时该行已经符合我的要求;其他时候,第一个电子邮件地址和 IP 地址之间有两个或更多额外的电子邮件地址。
编辑:我总是希望一行中出现第一个电子邮件地址(有时只有一个;有时有多个),并删除行上直到末尾 IP 地址之前的空格为止的所有其他内容。我需要在电子邮件地址和 IP 地址之间保留一个空格。如果该行仅包含一个电子邮件地址和 IP 地址,我希望保留它。
有人可以帮忙吗?
答案1
要获取显示的输出(而不是您描述的输出),您可以简单地使用以下命令打印第一个和最后一个字段awk
:
awk '{print $1,$NF}' file
或者perl
:
perl -lane 'print "$F[0] $F[$#F]"' file