プロが教えるわが家の防犯対策術!

シェルでファイルの文字列を置換したいです。
/*~*/のコメントの文字なので、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文字分の空白しか挿入されないです。

A 回答 (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スクリプトとして書くほうが確実かも。
    • good
    • 0

スクリプトを書くのに csh はちょっと推奨しにくいんだけど....


さておき, これくらいならシェルスクリプトにせずとも Perl のスクリプトで全部書いてしまえばいいのでは?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!