sed 删除第一个空格和第一个数字之间的文本

sed 删除第一个空格和第一个数字之间的文本

我有一个如下所示的文件:

[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

相关内容