2013-10-21 20 views
0

我有以下數據的文件:如何刪除第3字符

KP_site1 
KP_site2 
KP_site3 

我想下面的輸出:

site1 
site2 
site3 

我怎麼能在Perl的正則表達式實現這一目標?

+5

你要刪除的前3個字符或你想刪除特定'KP_'字首。它們是有區別的。 – Joe

+0

你可以使用子串方法。 – Anjali

+2

[** @ ALL高次數**關閉此問題後停下REPFARMING(http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist) – HamZa

回答

0

這與=~操作很簡單:根據什麼變量你實際使用到

$_ =~ s/^KP_//; 

自定義。這是一個就地修改。

要處理的數組:

map { $_ =~ s/KP_//; $_ } @array; 

要做到這一點上的文件:

perl -p -e 's/KP_//' < filename.txt 
0
perl -pi.bak -e's/...//' yourfile 

將刪除所有的新生產線,或沒有前三個字符如果沒有三個字符。它會改變你的文件,並使用擴展名.bak進行備份。

您也可以在這裏使用substr效果很好,再加上它有點直觀。

$_ = substr($_, 3); # returns the string after offset 3 
substr($_, 0, 3) = ""; # deletes the substring in offset 0-3 
2

例如看到下面的一個正則表達式與

my $str = "1234567890\n"; 
$str =~ s/^.{$n}//s; 
# was: $str =~ s/^.{$n}(.*)$/$1/s; 
print $str; 

沒有正則表達式

my $n = 3; 

my $str1 = "1234567890\n"; 
my $str2 = substr($str1, $n); 

print $str1; # 1234567890 
print $str2; # 4567890