linux 递归替换文件中的字符串
linux replace string in files recursively
我有一个文件夹,里面装满了 *.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
);
我在论坛中搜索并找到了一些解决方案,replce string 是我想要的,所以尝试了以下方法:
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 格式是这里的问题。我该如何解决它,或者以更有效和有意义的方式解决它。
你可以试试这个sed
sed '1s|//||;/disable-extensions/{s/ //;s/.*/\t ,&/};/--no-sandbox/a \t "--disable-dev-shm-usage"' input_file
从第 1 行删除 //
添加 ,
以符合 disable-extensions
附加disable-dev-shm-usage
输出
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
);
如果GNU sed
可用,如何:
sed -i -zE 's#//("--no-sandbox"[^\n]+\n[[:blank:]]+)#"--disable-dev-shm-usage"\n , #' file.java
-z
选项 sed
将行分隔符分配给 NUL 字符
这使得可以用换行符分隔整行。
如果您想递归地对 *.java 文件执行相同的替换,
请尝试:
find . -type f -name "*.java" -print0 | xargs -0 sed -i -zE 's#//("--no-sandbox"[^\n]+\n[[:blank:]]+)#"--disable-dev-shm-usage"\n , #'
由于-i
选项强制覆盖原文件,所以测试前请务必备份文件(或将备份后缀放在-i选项中)
我有一个文件夹,里面装满了 *.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
);
我在论坛中搜索并找到了一些解决方案,replce string 是我想要的,所以尝试了以下方法:
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 格式是这里的问题。我该如何解决它,或者以更有效和有意义的方式解决它。
你可以试试这个sed
sed '1s|//||;/disable-extensions/{s/ //;s/.*/\t ,&/};/--no-sandbox/a \t "--disable-dev-shm-usage"' input_file
从第 1 行删除 //
添加 ,
以符合 disable-extensions
附加disable-dev-shm-usage
输出
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
);
如果GNU sed
可用,如何:
sed -i -zE 's#//("--no-sandbox"[^\n]+\n[[:blank:]]+)#"--disable-dev-shm-usage"\n , #' file.java
-z
选项 sed
将行分隔符分配给 NUL 字符
这使得可以用换行符分隔整行。
如果您想递归地对 *.java 文件执行相同的替换, 请尝试:
find . -type f -name "*.java" -print0 | xargs -0 sed -i -zE 's#//("--no-sandbox"[^\n]+\n[[:blank:]]+)#"--disable-dev-shm-usage"\n , #'
由于-i
选项强制覆盖原文件,所以测试前请务必备份文件(或将备份后缀放在-i选项中)