ファイルツリー全体をスキャンし、すべての行を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
%s
bcm_errstr(rv)
ベストアンサー1
find
再帰を使用してファイルをインポートし、sed
インラインに変更できます。あなたの目標を正しく理解すると、次のように動作します。
find . -print0 | xargs -0 sed -i 's/%s/%d/g; s/bcm_errstr(rv)/rv/g;'
メモ:これはおそらくあなたが望むものよりもよく一致するかもしれませんが、リストされたターゲットの動作は非常に限られています。検索するファイルのみをフィルタリングするには、検索セクションを調整する必要があります。