- ベストアンサー
-i -e "s|^.|ok|" ./text どこが間違っているのでしょうか?
$ cat ./text aaa bbb $ perl -i -e "s|^.|ok|" ./text これを実行しても、./text に変化がありません。 どこが間違っているのでしょうか? $ cat ./text okaa bbb となることを期待しています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
スイッチ0でレコードセパレータをNull文字にしてみては? 例) ----------------------------------------------------------------- perl -p0e 's|^.|ok|' ./text ---------------------------------------------------------------------
その他の回答 (3)
- Tacosan
- ベストアンサー率23% (3656/15482)
$. に「現在の行番号」が入ります. したがって -pe "s/^./ok/ if $. == 1" が素直.
お礼
ありがとうございます! 成功しました!! しかし、mtaka2様と秒差だったようで...(^^;;
- mtaka2
- ベストアンサー率73% (867/1179)
> perl -i -pe "s|^.|ok| if ($.==1); close ARGV if eof;" test でどうでしょうか。 close 以下は、複数のファイルを指定した時に、行番号をリセットさせるためです。1ファイルしか指定しない場合は不要。
お礼
ありがとうございます! 成功しました!!
- Tacosan
- ベストアンサー率23% (3656/15482)
入出力を全くしていない, に 1票. -e オプションは「実行内容を指定する」だけです. つまり, 今の場合は $_ の最初の文字を「ok」に置き換える だけ. つまり, text の内容を読み込んでいないし何かを出力するということもありません.
お礼
ありがとうございます! 何も作用してないのですね... 皆様 この場合、どうすれば良いのでしょうか? perl -pe 's|^.|ok|' ./text とすると、 okaa okbb となってしまいます。 while(<>) 前に1行化させることができるのでしょうか?
お礼
ありがとうございます! 大成功です!! 行番号を使わないので応用が利きます! 参考URLまでご提示いただいて本当にありがとうございました!! 後からプログラミングPerl(第3版はP.578)の-0見ましたが、 さっぱりわからず、root139様の例の方が圧倒的に理解しやすいです!! 本当にありがとうございました。