与えられたパスに対して、標準のLinuxシェルコマンドを使用して、そのパス内のすべてのファイルまたはそのパスのサブディレクトリをテキストで囲みたい。指定されたテキストで正規表現を再帰的にラップする
具体的には、すべてのsyslogコマンドをsyslog(LOG_INFO,json_encode($obj));
などのassertコマンドでラップすると、assert(syslog(LOG_INFO,json_encode($obj)));
になります。
次のように動作する可能性がありますが、sed: -e expression #1, char 47: Invalid preceding regular expression
エラーが発生しました。 Wiktor第Stribiżewの答えに応じて
sed -i -E "s/(?<=syslog\()(.*)(?=\);)/assert(syslog(\1));/" /path/to/somewhere
BACKUPの情報
私は前にsed
を使用したことがありません。あなたの答えの私の理解を確認してください。代わりに
sed -i "s/syslog(\(.*\));/assert(syslog(\1));/g" /path/to/somewhere
-i
編集ファイルを。まず、画面上で何が変更されるかを見ることができます。s
代替テキストは、- パターンと置換(すなわち
/pattern/replacement/
)を囲む3/
」sはdeliminatorであり、任意の単一の文字だけでなく/
することができます。 syslog(\(.*\));
1つのプレースホルダを持つパターン。エスケープされたかっこを使用します。assert(syslog(\1));
置き換えサブストリングにエスケープされた1
(または2
、3
など)を使用した置換。g
最初の一致だけでなくすべてを置き換えます。
sed -i "s/syslog(.*);/assert(&);/g" /path/to/somewhere
でも同様ですか?
ありがとうWiktor。前に 'sed'を使ったことはありません。私の編集したオリジナルの質問を見て、それが正確かどうかを確認してください。ありがとう – user1032531
また、これは単一の通常のファイル '/ path/to/somewhere'でも動作しますか? '/ path/to/somewhere'がディレクトリで、これとサブディレクトリのすべてのファイルに適用したいのですが? – user1032531
ああ、どのように見えますか? 'find〜/ test -type f -print0 | xargs -0 sed -i "s/syslog(\(。* \));/assert(syslog(\ 1));/g" 'まだ私の編集した質問に対するあなたのコメントがあなたの答えに応答したいと思います。 – user1032531