-2

以下のような内容の test.txt というファイル名があります。

cat test.txt
MOD_12345_67890

ファイル内の「MOD_」を取り除く必要があります

使った

my $file = `awk '{gsub("MOD_", "");print}' test.txt`;

パールで。MOD_ を削除し、期待どおりに 12345_67890 を出力しますが、出力の後にさらにスペースがあります。

私の出力ステートメントは

my $new_file = $file . ".dat";
print "$new_file";

私の出力は次のようになります。

12345_67890.dat

しかし、私は出力を次のように取得しています

12345_67890
.dat

.dat は次の行に来ています

誰でも、数字の後にスペースまたはガベージ値を削除して、出力が 12345_67890.dat になるように手伝ってもらえますか

4

2 に答える 2

0

ただ行う:

$file =~ s/^MOD_//;

これにより、文字列の先頭から「MOD_」が削除されます。awk書いたように の gsub 関数をエミュレートするには、次のようにします。

$file =~ s/MOD_//g;

これにより、文字列のどこからでも「MOD_」がすべて削除されます。この場合、バックティックを使用する理由はありません ( qx! の代わりにバックティックを使用する理由はありません)。

于 2012-12-31T12:00:24.527 に答える
0

デフォルトでは、Perl は入力を処理しません。これは、Awk とは異なり、各入力行の末尾の改行がまだ残っていることを意味します。chomp入力行から改行するか、次のようにする必要がありますs/$/.dat/。または、オプションを指定して Perl を実行すると-l、入力から改行が削除され、出力に追加されます。

あなたの質問gsubはあまり明確ではありません。先頭の「MOD_」を削除するには、s/^MOD_//. 1 つの式で両方の置換を行うには、perl -pe 's/^MOD_(.*)$/$1.dat/' test.txt. $1括弧は一致を;にキャプチャします。括弧を追加すると、追加の後方参照$2$3などが作成されます。

于 2012-12-31T11:48:14.293 に答える