使用perl删除由行中的空格分隔的每个第二个单词?

时间:2014-09-23 09:29:41

标签: perl substitution

我想删除字符串中的第二个单词。什么是最好的方法? 我可以使用"替代"为了这?非常感谢您的回答!

hostname1: test.20330.9861.runscript: warning: this option is disabled in the BIOS;

期望的输出:

hostname1: warning: this option is disabled in the BIOS;

3 个答案:

答案 0 :(得分:1)

删除字符串中的第二个单词

$line =~ s/ \S+//;

答案 1 :(得分:1)

您的输出显示您不想删除每个第二个单词,只是 第二个单词。在这种情况下,请使用

之一
$ perl -lane '@F[1]=""; print "@F"' file
hostname1:  warning: this option is disabled in the BIOS;

或者,如果是较大的脚本的一部分:

$line=~s/( \S+)//;

或者,如果在文件上运行,则使用awk可能更简单:

$ awk '{$2="";}1' file
hostname1:  warning: this option is disabled in the BIOS;

答案 2 :(得分:0)

以下正则表达式可用于删除第二个单词s/\S\K\s+\S+//;

请注意它如何处理第一个单词前面有前导空格的情况:

use strict;
use warnings;

while (<DATA>) {
    # Remove 2nd Word
    s/\S\K\s+\S+//;
    print;
}

__DATA__
hostname1: test.20330.9861.runscript: warning: this option is disabled in the BIOS;
 hostname1: test.20330.9861.runscript: warning: this option is disabled in the BIOS;

输出:

hostname1: warning: this option is disabled in the BIOS;
 hostname1: warning: this option is disabled in the BIOS;