sedを使用して1行に複数の代替を実行する

sedを使用して1行に複数の代替を実行する

ファイルツリー全体をスキャンし、すべての行を2つの一致に2回置き換えたいです。つまり:

printf("Hello WORLD! %s, %d\n",bcm_errstr(rv),var);
dprintf("kjhgjkhfkhgfjgd %s\n",bcm_errstr(rv));

しなければならない

printf("Hello WORLD! %d, %d\n",rv,var);
dprintf("kjhgjkhfkhgfjgd %d\n"rv);

私は次のことを試しましたが成功しませんでした(sed.c私のテストファイルにはクエリと一致する2行が含まれています)。 p$ grep printf | grep "%s" | grep -rl bcm_errmsg\(rv\) sed.c | xargs sed -i -e 's/%s/%d/' -e 's/bcm_errstr\(rv\)/rv/'

ファイル名は不明ですが、ファイルの内容を見ているのでgrep代わりに使用します。find

コンテンツsed.c:

 $ cat sed.c  printf("kjhlkjhlkjh%dkjhgljhglj\n",bcm_errmsg(rv)); 
 dprintf("HELLO WORLD %d %d\n",test,bcm_errmsg(rv));

つまり、、、およびをsed含む行に2つの代替項目のみを適用したいのです。printf%sbcm_errstr(rv)

ベストアンサー1

find再帰を使用してファイルをインポートし、sedインラインに変更できます。あなたの目標を正しく理解すると、次のように動作します。

find . -print0 | xargs -0 sed -i 's/%s/%d/g; s/bcm_errstr(rv)/rv/g;'

メモ:これはおそらくあなたが望むものよりもよく一致するかもしれませんが、リストされたターゲットの動作は非常に限られています。検索するファイルのみをフィルタリングするには、検索セクションを調整する必要があります。

おすすめ記事