2017-01-20 3 views
0

私はスクリプトの変更を永続的に(1行のみ)変更する必要があるため、ある時点でそれ自身を変更する必要があるbashスクリプトを作成しています。私が知っているsed -iダイを試さずに多相bashを作成します。 Sedの置き換え

は、私がこれを行うために必要なものです。問題は私のsedコマンドが、私が望む行の代わりにコマンドが格納されている行を置き換えていることです。だから私は交換の間に除外を含める必要があると思う。のは、スニペットコードのものを確認してみましょう:

#!/bin/bash 

echo "blah,blah,blah" 
echo "more code here, not matters" 
sed -i "s/#Awesome line to be replaced/#New line here/" "/path/to/my/script" 2> /dev/null 

#Awesome line to be replaced 
echo "blah,blah,blah, more code blah" 

ここでの問題は、置き換えラインのみ#Awesome line to be replacedとラインではないです。これは、sedコマンドがある行と置き換えられます。

これは減少した例であるが、このスクリプトは、多型と、おそらく行番号の変更なので、それは行番号に基づいてすることはできません。そして、このようなsedコマンドが増えるでしょう...だから、パターンを除外するためにsedコマンドラインにいつもあるテキストを入れるのはいいと思っていました。そのテキスト部分は/dev/nullです。常にsedコマンドラインに置かれ、置き換えたい行には決して置かれません。 sed -iを使ってこれを実現するにはどうすればよい

?前もって感謝します。

EDIT多態性のために外観の順序(オフセット)を使用することはできません。

EDIT2#Awesome line to be replacedより前の先頭の文字は、変更する可能性があるため使用できません。これに基づいて既に答えた人のために申し訳ありません。すべての可能性を考慮して多態的なスニペットを書くのは複雑です。

+0

いかが 'sedの-i "S/^#素晴らしいラインここに/#新しいラインを交換する/" "/パス/に/私/スクリプト" 2>は/ dev/NULL''^'前に注意してください文字列を見つけてください... – anishsane

+0

例のために私が間違っていたので、それがうまくいくかどうかは分かりません。 – OscarAkaElvis

+0

検索文字列を '^ [\ t] *#置き換えられるべき行に変更するか' ^#[\ t] *必要に応じて置き換えられるべき素晴らしい行... – anishsane

答えて

2

このハックは動作することができます:

sed -i "s/#[A]wesome line to be replaced/#New line here/" "/path/to/my/script" 2> /dev/null 

私はそれがsedライン自体が一致しない理由、それは一目瞭然だと思います。

+0

サイドノート: 'ps -ef | grep whatever'コマンドにもマッチします。 'ps -ef | grep '[w] hatever''は 'grep [w] hatever'コマンドと一致しません – anishsane

+0

hhmmnn ....私はこのトリッキーなことがうまくいくと思います。私 – OscarAkaElvis

0

とアンカーあなたのsedの行を開始することにより、あなたの表現:これは確かsedだけ見つかったテキストがゼロまたは複数のタブを持つ行の先頭にある場合に一致した、と一致しませんようになります

sed -i "s/^$'\t'*#Awesome (rest of command goes here) 

実際のsedコマンドを使用してください。

+0

感謝をしようとするいくつかの時間をしてみましょうが、あなたは質問の下のコメントを読む場合は、いくつかのタブインデント – OscarAkaElvis

+0

@OscarAkaElvisがあるパターンにタブを追加:の 'SED -i「S/^ \ sの*#恐ろしい(残りコマンドはここに) ' – Aaron

+0

あなたの答えをありがとう...私はあなたに与えられたデータを知っています。これらの答えは正しいです。しかし、スクリプトは多形的で、インデントが変わる可能性があります。可能であれば、文字列の除外を推奨します。これは、100% – OscarAkaElvis

関連する問題