• ベストアンサー
  • 困ってます

UNIXのシェルスクリプト

UNIXのシェルスクリプトで以下のようなことをやりたいのですがいい方法を教えて下さい。 ファイルの中にある文字列があります。 たとえば”CURREND_DIR” この文字列をシェルスクリプトでカレントのディレクトリパスに変換したいのですが いい方法が思いつきません。 set dir_data = ‘pwd‘ sed -e ’s/CURRENT_DIR/$dir_data’ ファイル名 でできるかなと思ったのですが、”CURRENT_DIR”が”$dir_data”に置換されてしまいます。 さらにdirパスが”/”で区切られていることも問題のようです。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数403
  • ありがとう数1

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

  • ベストアンサー
  • 回答No.1
  • you-m
  • ベストアンサー率58% (190/327)

このコードには、いくつかの問題点があります。 1.sedのコマンドをシングルクオート''でくくっているため、シェルスクリプト的に、変数置換が行われない。 2.仮に、うまく置換されてもご自身で指摘している通り、パス区切りに使われている/をエスケープする方策がなされていない。 3.これは単なる書込み時の記述もれかと思われるが、sedコマンドの後ろのスラッシュがない。 ーーー 1.に関しては普通にダブルクオート""でくくってください。 2.sedの区切り文字はコマンドの後ろの文字がそのまま区切り文字になります。 例 sed -e "s#CURRENT_DIR#${dir_data}#" このようにすれば、/はsed的に特殊文字でなくなるので、問題ありません。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • UNIX シェルスクリプト

    UNIXのシェルスクリプトを使用してテキストファイルのある列にある 特定の文字列を条件としてその行を出力するということをやりたいのですが どのようにすればできるでしょうか? 例えば,以下のようなテキストファイルがあって,2列目がYAHOOの行を 主力したいというようなことです。 AAA SOFTBANK BBB YAHOO YAHOO TEST CCC QUICK DDD YAHOO ↓ BBB YAHOO DDD YAHOO

  • UNIXコマンド

    UNIXのviコマンドについてなのですが、 指定文字以降を置換する方法を考えているのですが、わかりません。sedを使うと思うのですが、わかる方いましたら教えていただきたいです。

  • 文字列置換

    UNIXのコマンドで文字列の置換を試みています。 今回行いたい置換としては。。。 12年 1986年2月12日 14 などの文字列を NUM年 NUM年NUM月NUM日 NUM などに、連続した数字をひとまとめにNUMに置換したいと考えています。 文字列の置換方法としてsedコマンドがあると聞いてしらべてみたのですが、いまいいち理解することができませんでした。 自分で考えて試してみたコマンドが以下の通りです。 sed -e "s/\([1-9]\{1,2,3,4\}\)/NUM/g" filename が・・・まったく置換はされませんでした。 よろしければお教えください。よろしくお願いいたします。

  • 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に書き換わってしまいます。渡し方がおかしいのでしょうか?宜しくお願いします。

  • UNIXのシェルスクリプトで負数の正負を反転させるには?

    UNIXのシェルスクリプトで負の数の符号を反転して生の数にしようと思ったらうまくできませんでした。 #! /bin/sh NUM=4 NUM2=-$NUM echo NUM2=$NUM2 とすると --4 となってしまいました。 また、 NUM2=`expr $NUM * (-1)` 等もやってみたのですが、エラーになりました。 結局、文字列としてawkで'-'を削ったのですが、やり方を間違えてる気がしてなりません。 awkやperl等を使わず、UNIXの単純な機能だけで数の正負を反転させる方法があれば教えてください。 基本情報でよくある2進数の符号の反転のやり方でもできると思うのですが、 10進数だとやり方がよくわかりません、、これでできるなら、このやり方も教えていただけるとありがたいです。 以上、よろしくお願いします。

  • sedなどで、特定の文字列の後の文字列を抽出したい

    sedなどで、特定の文字列の後の文字列を抽出したい シェルスクリプト内で、sedなどを使って特定の文字列の後の文字列を抽出したいのですが、どうすればいいでしょうか? たとえば、abcXYZ123defghiのなかから、XYZの後の「123」を抜き出したいです。 echo abcXYZ123defghi | sed ... のようにして実行させたいです。

  • バッチファイルで文字列を順番問わずマッチさせたい

    バッチファイルで、2個以上の文字列を順番問わずマッチさせたいと考えています。 例えば、 「111 222 333 444 555 666 777」 という内容のテキストファイルがあったとして、 sedコマンドを使って 「222」と「444」と「666」が この順番で含まれている行を置換したい場合、 sed -e "s/.*222.*444.*666.*/置換後の文字列/" in.txt > out.txt とすれば、問題なく置換されると思います。 しかし、上記の例では、 「777 666 555 444 333 222 111」 という内容のテキストファイルは置換されません。 文字列の順番を問わず、 「222」と「444」と「666」が含まれている行ならば、 その行を置換する、といった事は出来ないでしょうか。 sedコマンド以外でも構いませんので、何かいい方法をご存知の方がおられましたらお教え頂けないでしょうか。

  • sedなどで、特定の文字列内の数値を抽出したい

    sedなどで、特定の文字列内の数値を抽出したい シェルスクリプト内で、sedなどを使って特定の文字列内の文字列を抽出したいのですが、どうすればいいでしょうか? たとえば、job 999 at 2016-09-28 00:00のなかから、job &#65374; at内の「999」を抜き出したいです。 echo job 999 at 2016-09-28 00:00 | sed -e 's///g'... のようにして実行させたいです。

  • UNIXで、とあるテキストに対して2文字区切りで改行をいれるには?

    UNIXのシェルスクリプトで、このような動作ができないものかどうか考えています。 あるテキストファイルの内容を、2文字ごとに区切って改行を入れるように加工する 例えば file1.txt が以下のような内容であれば --file1.txt-- 000092 027301 01 0263000001 2文字ずつ区切って改行を挿入したファイル --file2.txt-- 00 00 92 02 73 01 01 02 63 00 00 01 を生成したいと思います。 ここで元のファイルは必ず、半角の数字のみで構成されており、 1行の文字数は最低2文字以上あり、なおかつ奇数個の文字列は存在しないものとします。 awk や grep や sed を組みあわせて考えているのですが、 なかなか解決に至りません。 どなたかお知恵を拝借願います。