• 締切済み

UNIX のシェル 文字の置換について

シェルでファイルの文字列を置換したいです。 /*~*/のコメントの文字なので、1行数を変えたくないです。 ─────────────────────────── ※1文字分の空白を「_」で表示します。 test.txtファイルの「XXXXX」を「aa___」に置換する。 ─────────────────────────── 【test.txt 置換前】 /**************/ /*_XXXXXYYYYY_*/ /**************/ 【シェルの内容 test.sh】 #!/bin/csh set IN_henkan = `printf "%-5s" $1` perl -i -p -e 's/XXX/'$IN_henkan'/g' test.txt 【シェルを実行】 test.sh aa 【test.txt置換前 希望する状態】 /**************/ /*_aa___YYYYY_*/ /**************/ 【test.txt置換前 実際の状態】 /**************/ /*_aa_YYYYY_*/ /**************/ ─────────────────────────── 「aa」の後ろに1文字分の空白しか挿入されないです。

みんなの回答

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

手元のdebianでやってみたら、こうなった: debian:~$ csh -x test.csh aa set IN_henkan = `printf "%-5s" $1` printf %-5s aa perl -i -p -e s/XXX/aa/g test.txt debian:~$ cat test.txt /**************/ /*_aaXXYYYYY_*/ /**************/ debian:~$ クォートの囲み方がよろしくなくて空白が適切に保持されてませんね。 素直にダブルクォートで囲ってシェル変数を展開させてみては。 そこらへんピンとこないのであれば、Tacosanさんがアドバイスされているとおり、perlスクリプトとして書くほうが確実かも。

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

スクリプトを書くのに csh はちょっと推奨しにくいんだけど.... さておき, これくらいならシェルスクリプトにせずとも Perl のスクリプトで全部書いてしまえばいいのでは?

関連するQ&A