SEDはファイル内の内部ファイルパスを見つけて置き換えます。

SEDはファイル内の内部ファイルパスを見つけて置き換えます。

以下の内部ファイルパスを持つアセットファイルがあります"/Users/testuser/dev/app-path/widget"

test.js

[["[email protected]","/Users/testuser/dev/app-path/widget"]],"_development":true,
"_where":"/Users/testuser/dev/app-path/widget","author"

SEDすべての内部ファイルパスを次に置き換えようとします。空白/空ひも。私がgrep次のことをするとき正規表現働く

grep -E '"/Users\/.*?"' ./resources/test.js

しかし、以下の正規表現を使用しようとすると、SED私のファイルのファイルパスは次のようになります。いいえ空の文字列に置き換えられました。何が欠けているのかよくわかりません。提案してください。

find ./resources -type f -exec sed -i -e 's/"\/Users\/.*?"/""/g' {} \;

SEDの例

他の同様の投稿を見つけましたが、置き換えるべきものが見つかりませんでした"/Users/testuser/dev/app-path/widget"- >""

正規表現が適用されます。正規表現 101:https://regex101.com/r/YycQkX/2/

答え1

ファイルを置き換えるには、"/Users/testuser/dev/app-path/widget"POSIXデフォルト正規表現(BRE)を使用できます。""

find ./resources -type f -exec sed -i 's/"\/Users\/[^"]*"/""/g' {} +

この[^"]*部分は文字ではなくシーケンスと一致します"

編集する: スラッシュの脱出を防ぐために、交換時に別の区切り文字を使用することもできます。@エドモートン)、たとえば、次のよう:に使用します/

find ./resources -type f -exec sed -i 's:"/Users/[^"]*":"":g' {} +

関連情報