2016-07-30 15 views
1

私はLinuxのシェルスクリプトではあまりよくありません。シェルスクリプト編集ファイル行

スクリプトでファイルを編集したい(行を見つけて編集する)。

オリジナルラインは次のとおりです。

#1 JVM_OPTS = "$ JVM_OPTS -Djava.rmi.server.hostname = <ホスト名>"

は、私がコメントを解除し、127.0とreplayeのホスト名にしたいです。 0.1

JVM_OPTS = "$ JVM_OPTS -Djava.rmi.server.hostname = 127.0.0.1"

答えて

3
あなたは、setコマンドを参照してファイル名を変更することができます

sed -i '[email protected]# JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=<hostname>"@JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=127.0.0.1"@' filename 
+0

ありがとうございました。 :-) –

3

ここでそれを行うための一つの方法です:

sed -ie 's/# \(JVM_OPTS=.*=\).*/\1127.0.0.1"/' path/to/file 

グループ\(JVM_OPTS=.*=\)内に捕捉テキスト、そうJVM_OPTS=から別の=記号までのすべての行を交換し、最後に127.0.0.1"を追加し、です。 # JVM_OPTS=で始まるファイル内の他の行があるかもしれない場合

、 はその後、パターンは、たとえば、より厳密に一致させることができます:

sed -ie 's/# \(JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=\).*/\1127.0.0.1"/' path/to/file 
+0

私はその解決策を試してみませんでしたが、#JVM_OPTSで始まるファイル内の他の行にも影響があるようです... 編集したいファイルには、これを開始する行がたくさんあります、cassandra-env.shを参照してください。申し訳ありませんが、私はそれを言及しませんでした。 あなたの答えは他の人にも役立つと思います: –

+1

そのケースを処理するための私の更新された回答を参照してください – janos

3

丁寧に回答していますが、紳士に教える方法とその理由については何もしていません。

あなたは世俗的なテキストエディタを使用していた場合

、edは、コマンド "エドファイル名" を呼び出した後の3つのコマンドを使用します。

S/^#//
S/<ホスト名> /127.0を。 0.1/

ワットだから、あなたが指定して、EDに直接これらのコマンドを提出するパイプを使用することができます - それはで読め文字カウントを報告することによって、あなたを気にしないように、その最初の引数として、ライティング「」ファイルを外します:

(echo 's/^#//';エコーの// 127.0.0.1/';エコーw)| ed - ファイル名

edは入力がなくなったり、 "ファイルの終わり"に遭遇したときに自動的に終了するので、 'q'をエコーする必要はありません(キーボードでこれをシミュレートするには、実際にqを入力するのではなく、-Dキー)。

+0

素敵な説明をありがとう。私はL.fuirの解を取ることにしました。しかし、あなたのアンカーは、他の人にとって、また私にとっては、後で助けになると思います。 –