Unixシェルを介してPerlスクリプトを実行するためのPerlコマンドの使用system
に問題があります。
UnixからPerlに変換するために適切に調整する必要があるより複雑な正規表現コマンドがあり、うまく動作しますが、ここで欠けているものが何であるかわからないようです。
Mobaxterm v7.1とPutty 0.60を使ってテストしました。
ファイル(file.txt
)があります。
23445 dir1/dir2/dir3
21343 dir1/dir2/dir3/dir4/file.B2
54322 dir1/dir2/dir3/file3.P
53223 dir1/dir2/dir3/dir4/dir5
23412 dir1/dir2/dir3/dir4/dir5/file5.xsd
54166 dir1/dir2/file6.AB
64544 dir1/dir2/fil7.ABE
grep
このファイルには、ファイルの行(ディレクトリ除外:行1と4)のみが含まれていて、それを新しいファイルに保存したいと思います。
system("grep '^.*\.[a-zA-Z0-9][a-zA-Z0-9]*\$' file.txt > file2.txt");
file2.txt
何も変更されておらfile.txt
ず、ディレクトリはまだ含まれています。
ただし、このコマンドはUnixシェルを介して実行されます(前のバックスラッシュなし$
)。
grep '^.*\.[a-zA-Z0-9][a-zA-Z0-9]*$' file.txt > file2.txt
file2.txt
出力:
21343 dir1/dir2/dir3/dir4/file.B2
54322 dir1/dir2/dir3/file3.P
23412 dir1/dir2/dir3/dir4/dir5/file5.xsd
54166 dir1/dir2/file6.AB
64544 dir1/dir2/fil7.ABE
もちろん、$
Perlがこれを不明な文字列として読み取らないように、Perlシステムコマンドで文字をエスケープする必要がありました。それ以外に、どのような他のシステムコマンドを調整する必要がありますか?
ベストアンサー1
二重引用符にはバックスラッシュが必要です。つまり、ポイントの前にバックスラッシュを2倍にします。
system("grep '^.*\\.[a-zA-Z0-9][a-zA-Z0-9]*\$' file.txt > file2.txt");
# ^
# |
# Here.