2016-04-07 1 views
0

ファイルの最初のサインを削除したい(新しいファイルを作成せずに)。それはラインである(そして、このラインは、最初の1か最後の1ではありません):私はsedコマンドでthuisをやろうとしているが、それは動作しません最初の行を置換する(linux bash)

#$config['rrdcached'] = "unix:/var/run/rrdcached.sock"; 

。それは私の命令です:

sed -i "s/#$config\['rrdcached'\].*$/$config\['config'\]/g" text.txt 

何か提案がありますか?

+0

エスケープ' 'sedの-i「S /#\ $ CONFIG \で$'を – sat

答えて

0

$文字に2つの問題があります。

まず、シェルは可変参照として$configを処理し、それを値に置き換えます。あなたはそれを防ぐために$をエスケープする必要があります。

第2に、$は正規表現で特別な意味があるため、そのレベルでもエスケープする必要があります。したがって、バックスラッシュと$をエスケープする必要があります。

sed -i "s/^#\\\$config\['rrdcached'\].*\$/\$config['config']/" text.txt 

あなただけの行の最初の試合を交換したいので、g修飾のための必要はありません。また、アンカーは^のアンカーを使用する必要があります。

また、置換文字列内の特殊正規表現文字をエスケープする必要もありません。

+0

申し訳ありませんが、私はそれを変え始めました。 – Barmar

0

ただ、以下のコマンドで#の最初のマッチを置き換える:このコマンドは、作品

sed -i '1 s/#//' test.txt 
+0

私は彼が '$ config'行でこれをやりたいだけだと思いますが、ファイル内の'# 'をすべて削除するのではなく、 – Barmar

+0

申し訳ありませんが、 "config"(ありがとう)を忘れましたが、私のコマンドは行番号1の最初の '#'のみを置き換えます( 'rrdcached'を'最後にgをつけてください) – Heinz

+0

質問は「この行は最初または最後のものではありません」と述べています – Barmar

0

、しかし、私は「=」の後に何かがあることを忘れてしまいました。今のところ、それ以降のすべてが削除されます。

私はこれを書いた:[\ 'rrdchaed'] .... `

sed -i "s/^#\\\$config\['rrdcached'\] = "unix:/var/run/rrdcached.sock";.*\$/\\\$config\['config'\]/ = "unix:/var/run/rrdcached.sock";" text.txt 
関連する問題