示されているように、入力テキスト ファイルinput.txtがあります。
a,2,3*b,4,5*c,7,3*
次のように数字を印刷する必要があります
a,2,3
b,4,5
c,7,3
なぜ正規表現が役立つと思いますか? やるだけのほうがはるかに簡単
tr '*' '\n' <input.txt
Perl ソリューションが必要な場合は、
perl -pe 'y/*/\n/' input.txt
これには分割を使用できます。
my $string = "a,2,3*b,4,5*c,7,3*";
my @substr = split(/\*/, $string);
{
local $, = "\n";
print @substr;
}
出力:
a,2,3
b,4,5
c,7,3
入力には、*
?で区切られたレコードがあります。入力レコード区切り をその値に設定でき$/
ます!
local $/ = "*";
while (<>) {
chomp;
print $_, "\n";
}
ワンライナーとしての例:
$ printf 'a,2,3*b,4,5*c,7,3*' | perl -lpe'BEGIN{$/="*"}'
a,2,3
b,4,5
c,7,3
(入力を-l
自動chomp
化し、出力セパレーターを出力に追加します。-p
入力のすべてのレコードをループし、コードを実行し、 の値を出力します$_
。行自体は処理せず、レコードセパレーターを から*
に変更するだけ\n
です。 )
元のデータに改行が含まれていない限り、これは正常に機能します。改行は変更されずに渡されます。s/\n//g
代替品はそれを大部分解決します。
$string =~ s/\*/\n/g;
すべての置換をインラインで行う必要があります
これも試すことができます:
my $data = "a,2,3*b,4,5*c,7,3*";
my $data2 = substr($data, 0, LengthOfSampleInputStringHere - 1);
my @values = split('*',$data2);
# Print and verify (Optional)
foreach my $val (@values)
{
print "${val}\n";
}
編集
次の正規表現も使用できます。
/([^\*]+)/