アプリ版:「スタンプのみでお礼する」機能のリリースについて

ファイルの一部を書き換えたいのですが、できればsed一発でやりたいのです(可能ならSSHで一発更新したい)

XXX AAAA BBBB
XXX ORACLE_HOME /oracle/home/
XXX BBBB CCCC

こんなファイルのORACLE_HOMEの後ろを/oracle2/homeとかに書き換えたいのです。
XXX AAAA BBBB
XXX ORACLE_HOME /oracle2/home/
XXX BBBB CCCC

要件としては"XXX ORACLE_HOME"のある行を「XXX ORACLE_HOME 書き換えたい文字列」みたいに書き換えたいのです。
XXX ORACLE_HOME /oracle/home/
この行は、
XXX ORACLE_HOME Dummy
だったり、
XXX ORACLE_HOME
こんなんだったりします(ようは3カラム目の文字列は不定、0文字の場合もあり)
またファイルの中の何行目にでてくるかは不定です。
必ず2行目にあるわけではありません。
"XXX ORACLE_HOME"はファイルの中の特定の1行にしか出てこない(複数行は出てこない)としていいです。

どなたかsedの得意な方、解法お願いします。

A 回答 (2件)

sed -i 's:^XXX ORACLE_HOME.*:XXX ORACLE_HOME 書き換えたい文字列:' filename



: は、「置き換えたい文字列」に含まれない記号を使ってください。
    • good
    • 0
この回答へのお礼

わお。最高です。感謝感謝。

お礼日時:2016/04/03 06:11

s|^\(XXX ORACLE _HOME\).*|\1 書き換えたい文字列|



・通常、 s/パターン/置換/ と 区切りには / を使うが、実際には、「sの直後の文字」が区切り文字になる。
「ORACLE_HOMEの後ろを/oracle2/homeとかに書き換えたい」といった場合、区切り文字を / にしていると、「置き換えたい文字列」中の / を「区切り」とさせないために、 \/ とエスケープする必要がある。
「置き換えたい文字列」に / が多用される場合には、区切り文字自体を、コマンド中で使われていない文字に変えてしまうのが便利。
| はあくまで一例

・パターン中に\(\)で括った部分は、後で \1,\2 ...で引用できる。(\(の出てきた順番に1,2,3と番号が対応する)
 同じでなければならない箇所を、打ち間違えて違うものにしていしまった、という間違いが減る
    • good
    • 0
この回答へのお礼

おお、さらに保守性も考えたプロの技ですね。

お礼日時:2016/04/03 10:17

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