Linux递归地替换文件中的字符串



我有一个文件夹,其中充满了*.java文件。它有以下方法:

options.addArguments(//"--no-sandbox", // trying to make browser opening faster, but this argument can have security implications
"--disable-extensions" // avoid the chrome automation extension crash
, "--no-proxy-server" // trying to make browser opening faster
, "--proxy-server='direct://'" // trying to make browser opening faster
, "--proxy-bypass-list=*" // trying to make browser opening faster
, "--proxy-server=" // trying to make browser opening faster
// ,"--blink-settings=imagesEnabled=false" // disable images loading for faster testing
);

我想这样修改:

options.addArguments("--no-sandbox", // trying to make browser opening faster, but this argument can have security implications
"--disable-dev-shm-usage"
, "--disable-extensions" // avoid the chrome automation extension crash
, "--no-proxy-server" // trying to make browser opening faster
, "--proxy-server='direct://'" // trying to make browser opening faster
, "--proxy-bypass-list=*" // trying to make browser opening faster
, "--proxy-server=" // trying to make browser opening faster
// ,"--blink-settings=imagesEnabled=false" // disable images loading for faster testing
);

我在论坛上搜索并找到了一些解决方案,替换字符串是我想要的,所以尝试如下:

grep --null -rl //"--no-sandbox" -l | tr 'n' ' ' | xargs --null sed -i 's///"--no-sandbox"/"--no-sandbox",
"--disable-dev-shm-usage|,/g'

但是它给了我以下错误:

sed: -e expression #1, char 6: unknown option to `s'

我猜old_string和new_string格式是这里的问题。我怎样才能解决它,或者用一种更有效、更有意义的方式来解决它。

如果GNU sed可用,则:

sed -i -zE 's#//("--no-sandbox"[^n]+n[[:blank:]]+)#1"--disable-dev-shm-usage"n            , #' file.java

sed-z选项将行分隔符分配给NUL字符它允许用换行符分隔整行。

如果你想对*.java文件递归地执行相同的替换,请尝试:

find . -type f -name "*.java" -print0 | xargs -0 sed -i -zE 's#//("--no-sandbox"[^n]+n[[:blank:]]+)#1"--disable-dev-shm-usage"n            , #'

由于-i选项强制覆盖原始文件,请确保在测试前备份文件(或将备份后缀置于-i选项后)。

最新更新