括弧でsedを使用する方法は?

括弧でsedを使用する方法は?

複数の.phpファイルがあり、文字列を含むすべての項目を置き換えたいです。

find: jQuery(function
replace: head.ready(function

以下を使って正しく行っていると思います。

find . -name '*.php' -exec sed -e 's/jQuery[(]function/head.ready[(]function/g' -i'.bak' {} \;

結局のところ、何が起こるのかは次のようjQuery(functionに置き換えられるということです。head.ready[(]function

(止めれば逃げられると思ったんですけど[]それじゃないんですよ。

誰でもどんな提案がありますか?

ベストアンサー1

(sed 正規表現の特殊文字ではありません。あなたはそれを脱出する必要はありません。

sed -e 's/jQuery(function/head.ready(function/g'

[(]正規表現で意味するのは、単一の要素()のみを含む文字セットです。(これを作成するための複雑な方法です(

[(]代替テキストは3文字を意味します[(]。代替テキストでは、括弧は特に意味がありません。

必要に応じて、関数をグループに配置して、関数名が重複するのを防ぐことができます。グループはバックスラッシュの角かっこで区切られます。

sed -e 's/jQuery(\(function\)/head.ready(\1/g'

交換した製品にも影響がありますjQuery(functionwithsuffix。これを防ぐ簡単な方法は、拡張されたPerl正規表現を理解するツールを使用して、(?![^A-Za-z0-9_])検索文字列の末尾に「次に英数字以外の文字が来る」という意味を使用できるようにすることです。 Perl正規表現では(特別で、前にバックスラッシュが必要です。

perl -pe 's/jQuery\(function(?![^A-Za-z0-9_])/head.ready(function/g'
perl -pe 's/jQuery\((function)(?![^A-Za-z0-9_])/head.ready($1/g'

おすすめ記事