sed 空白のワイルドカードを含む改行

sed 空白のワイルドカードを含む改行

私のファイルには1500行があり、行番号1449を変更したいと思います。次のコマンドが利用できることを知っています。

sed -i '1449s/"'$' == $rdn{ strlen($rdn) - 1 })"/'$' == $rdn[ strlen($rdn) - 1 ])/' file_name

しかし、うまくいきません。変えたい

'$' == $rdn{ strlen($rdn) - 1 })  

到着

'$' == $rdn[ strlen($rdn) - 1 ])

sedで指定された行番号に置き換える方法を知っている人がいれば案内してください。

ベストアンサー1

問題は行番号やsed引用符ではありません。一重引用符の中に二重引用符を入れ子にすることはできないため、一致する一重引用'1449s/"'符があるため、スクリプトは1449s/"$ ==等で始まります。

それ以外の場合はパターンが一意であるため、'$'単一引用符のみを使用できます。

sed -i '1449s/ == $rdn{ strlen($rdn) - 1 })/ == $rdn[ strlen($rdn) - 1 ])/' file_name

または、内容全体を二重引用符で囲みましたが、$シェルからエスケープする必要があります。

sed -i "1449s/'\$' == \$rdn{ strlen(\$rdn) - 1 })/'\$' == \$rdn[ strlen(\$rdn) - 1 ])/" file_name

あるいは、最後に行に何も含まれていないか、置き換えようとしている{}だけを除外すると、次のyコマンドを使用できます。

sed -i '1449y/{}/[]/' file_name

おすすめ記事