• 締切済み

シェルから引数を使用してsedコマンドを使用する方法

テキストファイル内のAという文字を置き換えようと思っています。 シェルから引数渡しでsedコマンドを使用してやろうと思っているのですが、引数渡しの方法をご存知の方がいらっしゃいましたらご教授ください。 具体的には下記のようなことをしようとしております。 sample.txt --- ABC AABBC sample.txt内のAという文字を他の文字に置き換えようと思っています。 hoge.sh 1 として、Aを1に置き換えようと思っています。 hoge.shは、 #! /bin/csh sed -e 's/A/${1}/g' sample.txt >! sample2.txt として実行したところ、引数がうまく拾えず1に置換することができずに困っています。 よろしくお願いします。

みんなの回答

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

single quote ではなく double quote にするのは当然として, 悪いことは言わないから csh ではなく sh にしましょう.

  • Ceren
  • ベストアンサー率49% (90/183)
回答No.1

${1}が展開されないのは、single quoteを使っているからではないでしょうか。 double quoteに変えればうまくいきませんか?

関連するQ&A

  • sedコマンドをシェルで実行でうまくいかない

    sedコマンドをシェルで実行しようとしています。 sedコマンドの引数がシングルクォートのためうまく出来ずに困っています。 テキスト内の /abc を xxx と変えたいとします。 以下のように作ってみました。 #!/bin/sh a='\/abc' b=xxx sed \'$a/$b\' txt しかし 認識できないコマンドです: '\/abc/xxx' というエラーが出ます。 $aで扱いたい変数は実はもっと長いパスの為、 ぜひ変数を使いたいのですが、うまくやる方法は無いでしょうか。

  • cshのsed

    ヤマトです。 cshのsedについて質問します。 環境はRed Had Linux7.2です。 文字列置換でsedを使っています。 置換文字列に'/'が入ってしまう場合正常に動作しません。 原因は分かります。'/'が多いって事ですよね(曖昧な言い方ですみません) どのようにしたら、できるでしょうか? 以下に、サンプルを書きます。 ====SAMPLE.sh(一部抜粋)==== set DATA_DIR = /home/hoge set FILE_NAME = hoge.txt sed "s/__DIR__/$DATA_DIR/g" < FILE_NAME > FILE_NAME.sed ====hoge.txt==== 置換した ディレクトリは __DIR__/です ====hoge.txt.sed(作成したいファイル)==== 置換した ディレクトリは /home/hoge/です どのようにsedしたら良いのでしょうか? 教えて頂けると有り難く思います。宜しくお願いします。

  • シェルスクリプトのコマンドの中に引数を使いたいのですが

    シェルスクリプトのコマンドの中に引数を使いたいです。 例えば sed -i 's/*/$1/g' /* のように文字置換コマンド中に引数で書き換えられるようにしたいのですがそのまま$1に書き換わってしまいます。渡し方がおかしいのでしょうか?宜しくお願いします。

  • sed コマンドについて

    はじめまして 当方、初心者で勉強の身です。ご回答頂けたら幸いです。 linuxのシェルファイルが100以上あり、こちらの全ファイル内に含まれる文字列"ABCDE"を文字列"12345"に置換をしたいと思っています。 sed コマンドで sed -e "s/ABCDE/12345/g" *.csh のように実行しても、画面上に変換後が表示されるだけで その後、ファイルを見ても置換されていません。 どのようにすれば、全ファイルが修正されるのでしょうか。 以上です。回答の方をよろしくお願い致します。

  • sedでファイルで条件指定の場合

    スクリプト初心者です。 sedコマンドを使用して文字列の置換をおこないたいのですが、条件がたくさんあるため、 条件部分をシェルのファイルと別ファイルにして実行したいです。 その際、シェル実行時の引数を条件ファイルに入れたいのですが、通常の文字列扱いになってしまい困っています。 アドバイスをお願いいたします。 ・test.sh  find $1 -type f | xargs sed -i -f mypattern.sed ・mypattern.sed  s|${1}aaa|/bbb|g test.sh hoge と実行した場合 "hogeaaa" を "bbb" に置換したいです。

  • cshの文字列置換

    ヤマトです。 cshでファイル文字列を置換したいのですが、分かりません。 環境はRed Had Linux7.2です。 hoge1.txt の中の 'HIDUKE' という文字列を今日の日付に置換し、 hoge2.txt に出力するようなシェルを作りましたが、正常に動作しません。 ====hoge1.txt(置換前)==== 今日はHIDUKEです。 ====hoge1.txt(置換前)==== 今日は030814です。 ====SAMPLE.sh(一部抜粋)==== set TODAY = `date +"%y%m%d"` sed 's/HIDUKE/$TODAY/g' < hoge1.txt > hoge2.txt 以上のようなシェルを作りました。 結果として、hoge2.txtには出力されるのですが、 「今日は$TODAYです」 となってしまいます。 変数の値を置換するにはどのようにしたら良いのでしょうか? 教えて頂けると有り難く思います。宜しくお願いします。

  • sedコマンドに関して

    サーバーにあるファイルの中身を置換する為 Tera Termのsedコマンドを使おうとしたのですが 文字列の「'」が置換できません。 以下のように入力してみましたがだめでした。 sed -e 's/'/'aa/g' text1.txt > text2.txt sed -e 's/\'/\'aa/g' text1.txt > text2.txt 出来ないんでしょうか!? 宜しくお願いいたします。

  • PHP シェルスクリプト 引数

    失礼します。現在PHPからシェルスクリプトを引数を付けて実行し、戻り値で確認が出来るか試しているのですがなかなか参考になる記事がなく実現が出来ない状態です 調べたところ、 phpからhoge.shというシェルファイルをargという引数で実行したいとします。 引数を"'. .'"で囲う事で、引数を渡せるようです。 $output = shell_exec('/bin/sh /path/to/hoge.sh "'.$arg.'"') var_dump($output) 上記のような記事を見つけたのですがhoge.shはどのように$argを受け取り、戻り値を渡しているのでしょうか?また、$argの値の中身は渡す引数の内容という認識で正しいのでしょうか?サンプルコードなどがあるとうれしいです。 ご教授よろしくお願い致します。

  • sedコマンド置換について(マッチした数字を演算に再利用したい)

    こんにちは Linuxのsedコマンドについて質問させてください。 軽く検索をかけたりUNIXのコマンド本を調べましたが、わかりませんでした。 例えば正規表現でマッチした数字を2倍して返す処理をする場合 perlではhogeという文字列に対して  hoge=~s/(\d+)/$1*2/g; このような処理で実現できると思います。 このように今マッチしたものに対して何か処理を行って置換するということは sedコマンド、もしくはそれを使ったシェルスクリプトで処理することは可能でしょうか? sedの方が処理速度が速いので、こちらを使いたいのです。

  • sedコマンドでのエスケープ文字の扱い

    はじめまして。Linuxのsedコマンドで困っています。 sedの置換文字列として連続する\をリテラルとする処理を考えていますが、\がいくつ入ってくるか(変数)、わからない場合において、複雑な処理なしに対処できないか、考えています。 ↓簡単な例ですが、コマンドベースで説明すると以下のようなものです。 $ var='\\' $ cat file.txt aa $ sed "s/.*/$var/" file.txt \ という結果になりますが、置換文字を変数から取る際に、連続する\が設定されるケースを想定したプログラムを組むたいと思っています。 \が入ってくる個数がわかるのであれば、\を2倍にセットしておけばできそうですが、いくつセットされてくるかはわからない場合、何かよい方法はないでしょうか。 念のため、Linux環境で、GNU sed 4.1.2版で試行しています。シェルはbashです。よろしくお願いします。