• ベストアンサー

-i -e "s|^.|ok|" ./text どこが間違っているのでしょうか?

$ cat ./text aaa bbb $ perl -i -e "s|^.|ok|" ./text これを実行しても、./text に変化がありません。 どこが間違っているのでしょうか? $ cat ./text okaa bbb となることを期待しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.4

スイッチ0でレコードセパレータをNull文字にしてみては? 例) ----------------------------------------------------------------- perl -p0e 's|^.|ok|' ./text ---------------------------------------------------------------------

参考URL:
http://www.ibm.com/developerworks/jp/linux/library/l-p101/
gotoumak
質問者

お礼

ありがとうございます! 大成功です!! 行番号を使わないので応用が利きます! 参考URLまでご提示いただいて本当にありがとうございました!! 後からプログラミングPerl(第3版はP.578)の-0見ましたが、 さっぱりわからず、root139様の例の方が圧倒的に理解しやすいです!! 本当にありがとうございました。

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

$. に「現在の行番号」が入ります. したがって -pe "s/^./ok/ if $. == 1" が素直.

gotoumak
質問者

お礼

ありがとうございます! 成功しました!! しかし、mtaka2様と秒差だったようで...(^^;;

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.2

> perl -i -pe "s|^.|ok| if ($.==1); close ARGV if eof;" test でどうでしょうか。 close 以下は、複数のファイルを指定した時に、行番号をリセットさせるためです。1ファイルしか指定しない場合は不要。

gotoumak
質問者

お礼

ありがとうございます! 成功しました!!

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

入出力を全くしていない, に 1票. -e オプションは「実行内容を指定する」だけです. つまり, 今の場合は $_ の最初の文字を「ok」に置き換える だけ. つまり, text の内容を読み込んでいないし何かを出力するということもありません.

gotoumak
質問者

お礼

ありがとうございます! 何も作用してないのですね... 皆様 この場合、どうすれば良いのでしょうか? perl -pe 's|^.|ok|' ./text とすると、 okaa okbb となってしまいます。 while(<>) 前に1行化させることができるのでしょうか?

関連するQ&A