• ベストアンサー

sedの置換文字に変数を使用したいのですが・・・

あるファイルの特定の文字を変換し、上書きをする処理を行いたいのですが、sedの置換文字に変数が渡せなくて困っています。 例: X="a" Y="b" echo test.txt | sed 's/${X}/${Y/g}' >test.txt sedでは置換文字に${X}といった変数を使用することはできないのでしょうか?

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.1

' ・・・' で囲まれた中の$はそのままドルマークです。変数展開をするなら、'・・・'で囲んではいけません。 何も囲まないか、"・・・"で囲むかです。

rui58
質問者

お礼

シングルクォートは駄目なんですね。 ご回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • linuxのsedコマンド変数置換の質問です

    はじめまして。 要点だけになってしまいますが 教えていただきたいことがあってトピしました。 この構文では動きませんが僕がやりたいことは こういうイメージです。 111.txt 444 444 1.txt 111 222 333 444 a=`cat 111` echo $a 結果 444 444 1.txt | sed 's/222/$a/g'          ↑ ↑     置換対象 変数 word を $a に収まっている文字列で置換します。 結果 111 444 444 333 444 どなたかわかるかた教えてください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • sedで置換した値を変数にセットしたい。

    sedで置換した値を変数にセットしたい。 次のように変数aaにセットした文字列「abc」を「abd」に置換して、再度変数aaにセットしたいのですがうまくいきません。 # aa=abc # aa=`echo $aa | sed -e 's/c/d/'` sed: -e 表現 #1, 文字数 5: 「s」コマンドが終了していません # 宜しくお願いします。

  • sedで置換した値を変数にセットしたい。

    sedで置換した値を変数にセットしたい。 次のように変数aaにセットした文字列「abc」を「abd」に置換して、再度変数aaにセットしたいのですがうまくいきません。 # aa=abc # aa=`echo $aa | sed -e 's/c/d/'` sed: -e 表現 #1, 文字数 5: 「s」コマンドが終了していません # 宜しくお願いします。

  • ブランクを含む環境変数の置換

    こんにちは。 今、UNIX上でファイルのある文字をある環境変数で置換するようなシェルを作成中です。 そこで、以下のようにsedを使用してみました。 cat AAA.txt |sed s/CurFY/`echo $FY`/g AAA.txtの内容 AAA BBB CurFY この時、環境変数$FYがブランクを含まない値の場合 はうまくCurFYを$FYの値に変更できるのですが、$FYに ブランクが入っていた場合は実行できません。 実行例) setenv FY "ACT 2003" cat AAA.txt |sed s/CurFY/`echo $FY`/g sed: コマンドが正しくありません: s/CurFY/ACT となってしまいます。 何かうまい方法はないでしょうか? どうかアドバイスお願いいたします。

  • sedスクリプト 置換

    この度、はじめてsedスクリプトをかいてみようと思っています。 以下の機能を持った置換スクリプトを書きたいのですが、 アドバイスなど頂ければ幸いです。 ・abcディレクトリ内を検索して(サブディレクトリも含む)、test.txtというファイルを探し出す(test.txtは複数あります) ・検索された複数のtext.txtを一括で置換する ↓置換内容 ・test.txtの5行目にある文字列を1からはじまる連番に置換する(test.txtは複数あるので、処理した順に連番をつけていく) イメージが伝わりにくい場合は、どうかご指摘ください。 よろしくお願いします

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

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

  • sedでの改行置換

    sedを用いた処理で質問があります。 出力結果の改行を置換して一列として表示しようとしているのですが、どうもうまくいきません。 (perlは敢えて使いません) 例えば、以下のようなファイルがあるとして、 $ cat hoge.txt hoge boo bar この出力結果を加工して、「hoge boo bar」のように、 改行をスペースに置換して一行として表示したい場合は、どのようにすれば良いでしょうか? ちなみに、以下のような使い方だと、うまくいきませんでした。 $ cat hoge.txt | sed 's/\ > / /g' $ cat hoge.txt | sed 's/\n/ /' ■実行環境 OS : RedHat EL 1 sedのバージョン : sed-4.0.7-3 宜しくお願い致します。

  • sedでの置換がうまくできません。

    sedを使用して以下の様な文字列を置換したいと考えています。 iPar(\"w\") → 何かの文字列 そこで以下のようなsedスクリプトを作成しました。 s/iPar\(\"w\"\)/test/g  → a.sed 使用してみました。具体的には↓のコマンド >sed -f a.sed inputデータ >outputデータ しかし結果ファイルをみても何も変わってくれません。 なにが悪いのでしょうか? どなたかご指南下さい。

  • sambaで連携したファイルをLinuxからsedでの置換

    お世話になります。 sedを使って文字列の置換をしたいと考えています。 sambaでwindowsから連携したファイルに対して置換を行いたいのですが、うまく置換ができません。 Linux側の「GNOME端末」からファイルの中身をのぞくと、全角の箇所が文字化けしてしまっていました。どうやら原因はこれだと思うのですが、どうすれば文字化けしていてもうまく置換できるでしょうか? あるいはLinux側から見ても文字が化けないようにするにはどうすればよいでしょうか? 例)   test[Tab]2008年5月05日[Tab]あああ[Tab]aaaaa という文字列に対し、 sed -e 's/^.*\t.\(.*\)\t.*\t.*$/3\1/' test.txt というコマンドを実行したが、うまく置換されない。 ※test.txtは、文字列が格納されているファイル。 よろしくお願いいたします。

  • 複数パターンのsed文についての質問です。

    sedの使い方がよく分からない為、教えてください。 テキストの中で、同じパターンスペースに対して、 別の文字を置換させたいと考えています。 (一つ目のマッチングには、yyy 二つ目には、zzzなど) sed文ではコマンドブロックの書き方がわからないので、 sedスクリプトを別に用意してファイルを読み込ませた所、 うまくいきました。 sed -f test.sed test.txt しかし、第二段階として、置換文字列を変数にしたところ、 変数展開ができませんでした。実際には変数展開を考えているので、 困っているところです。 この問題を解決できるようなsed文(sed -e)か、sedスクリプトを 教えて頂きたく宜しくお願いいたします。 下記、テスト材料です。 一つ目のabcを $HOMEに、 二つ目のabcを $SHELLに置き換えたいです。 text.txt (編集元テキスト) ------------------ User yyyyy abc Pass zzzzz abc ------------------- test.sed(SEDスクリプト) --------------------- /User/{ N N s/abc/$HOME/ N N N s/abc/$SHELL/ } ----------------------

初期化できませんAF
このQ&Aのポイント
  • 初期化できませんAFとなる問題が発生しました。
  • Windows10で初期化できませんAFというエラーが表示されます。
  • 無線LANで接続している場合、初期化できませんAFの問題が発生する可能性があります。
回答を見る