2012-01-07 69 views
2

一个字符串我是新来的这两个Perl和REG-EX的,而且我想删除一个文本文件中字符串的第一个单词(或第一字线),以及其后的任何空白。的Perl - 删除第一个词与正则表达式

例如,如果我的字符串为'one two abd123words',我想删除'one '

我尝试的代码是:$line =~/(\S)$/i;
但这只给了我硬道理。
如果它有什么不同,我试图删除的单词是一个输入,并存储为$ arg。

回答

10

要删除的每一行使用的第一个字:

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

编辑了解释:

s/.../.../   # Substitute command. 
^      # (Zero-width) Begin of line. 
\S+     # Non-space characters. 
\s*     # Blank-space characters. 
//     # Substitute with nothing, so remove them. 
+0

奇妙的是,感谢您的解释,我发现了大量的网站,详细说明各个正则表达式命令如何工作,但很少解释如何实际组合部分。 – ImprovedSilence 2012-01-07 21:06:17

+0

为什么当我试图打印这个时,我只是得到一个'1'(布尔?),而不是字符串?我只是用'print $ line =〜s/^ \ S + \ s * //;'? – ImprovedSilence 2012-01-07 22:39:28

+1

@ImprovedSilence:在其他指令中打印:'$ line =〜s/^ \ S + \ s * //;打印$线;'或'使用开关r',如:'打印$线=〜S/^ \ S + \ S * // R等' – Birei 2012-01-07 22:47:38

2

你的意思是,这样的吗? :

my $line = 'one two abd123words'; 
$line =~ s/^\s*\S+\s*//; 
# now $line is 'two abd123words' 

(即除去任何初始的空白,接着是一个或多个非空白字符,然后通过任何新的初始空格。)

2

在单行形式:

$ perl -pi.bak -e 's{^\s*\S+\s*}//' file.txt