2011-08-02 8 views
-1

perlを使って正規表現に基づいて配列から先頭の要素をシフトする方法は?これらはデータコードであり、入力レコードセパレータ($ /)はperlを使った正規表現に基づいてシフトする方法は?

$/= '#'に設定されています。

たとえば、次のテキストファイルにはこのデータレコードが含まれています。

#dddddddddd 
    ccccccccccc 
    eeeeeeeeeee 
    fffffffffff 

私は、たとえば、#記号を削除してテキストを維持したいと思います:これは、配列に関連していないよう

dddddddddd 
    ccccccccccc 
    eeeeeeeeeee 
    fffffffffff 
+1

あなたがやっていること、 – ysth

答えて

2

あなただけのテキストファイルを操作したい場合は、ワンライナーが最善の解決策のように思えます。これでファイルが編集され、 "inputfile.txt.bak"にバックアップが保存されます。

perl -pi.bak -we 's/^#//' inputfile.txt 

それとも、シェルのリダイレクトを行うことができます。

perl -wpe 's/^#//' inputfile.txt > outputfile.txt 

これらは、ファイル内のすべての行を変更しようとします。最初の行を変更したいだけの場合は、別のものが必要です:

perl -wpe 's/^#// if ($. == 0);' inputfile.txt > outputfile.txt 
0

。あなたは文字列を扱っているようです。

これは文字列$lineのための主要なハッシュマーク削除:正規表現置換でshiftを混同しないでください

$line =~ s/^\#//; 
+0

なぜバックスラッシュですか? '# 'はメタキャラクタではありません。 – Zaid

+1

それが覚えていなかった。疑いがあるとき、私は脱出する。 –

+0

特別なキャラクタセンスをオンにするバックスラッシュの数多くの正規表現のバリエーションでは、習慣として「エスケープ」のために[]を使用することができます。そして、この場合、あなたは慎重になる小さな理由があります。 '#'は( 's /// x')拡張正規表現モードで特別です。 – Mark

2

を。

shiftは、文字列ではなくの配列から最初の要素を削除します。

正規表現の置換は、先頭の'#' sigilの削除に対応できます。

配列の最初の要素は$array[0]です。正規表現置換が、この最初の要素に適用される場合

'#'が削除されます。


my @array = ('#dddddddddd', 'ccccccccccc', 'eeeeeeeeeee', 'fffffffffff'); 

$array[0] =~ s/^#//; 

print $array[0]; # 'dddddddddd' 
+0

入力レコードセパレータ($ /)が$/= '#'に設定されていることを忘れていました。これは私がdatarecordで読むことを可能にするからです。 – jbs

+0

@jbsおそらく、そのような重要な情報を質問に追加するべきです。 – TLP

+0

TLPのおかげで、質問を更新して入力レコードセパレータを$/= '#'に設定しました。 – jbs

関連する問題