-2

我有一个名为 test.txt 的文件名,内容如下。

cat test.txt
MOD_12345_67890

我需要摆脱文件中的“MOD_”

我用了

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

在 perl 中。它删除 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

Perl 默认不处理它的输入。这意味着每个输入行上的尾随换行符仍然存在,这与 Awk 不同。您需要chomp将换行符从输入行中删除,或者执行类似s/$/.dat/. 或者使用选项运行 Perl -l,这将从输入中删除换行符并将它们重新添加到输出中。

你的问题gsub不是很清楚。要删除前导“MOD_” s/^MOD_//,. 要在一个表达式中进行两种替换,perl -pe 's/^MOD_(.*)$/$1.dat/' test.txt. 括号将他们的匹配捕获到$1; 额外的括号创建额外的反向引用$2,$3等。

于 2012-12-31T11:48:14.293 回答
0

做就是了:

$file =~ s/^MOD_//;

这将从字符串的开头删除“MOD_”。要模拟awk您编写的 gsub 函数,请执行以下操作:

$file =~ s/MOD_//g;

这将从字符串中的任何位置删除所有出现的“MOD_”。在这种情况下,没有理由使用反引号(从来没有理由使用反引号代替qx!)。

于 2012-12-31T12:00:24.527 回答