私のファイルには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
答え2
sed -i -e "1449s/})$/])/g" -e "1449s/{ strlen/[ strlen/g" filename
出力
'$' == $rdn[ strlen($rdn) - 1 ])