Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 查找并替换所有文件中的字符串递归问题_Bash_Replace_Sed - Fatal编程技术网

Bash 查找并替换所有文件中的字符串递归问题

Bash 查找并替换所有文件中的字符串递归问题,bash,replace,sed,Bash,Replace,Sed,我尝试使用此命令在我的android项目中查找并替换字符串 find . -name '*.java' -print0 | xargs -0 sed -i "" "s;//\#Logger\.;Logger\.;g" //#记录器=>记录器 这是工作,但在一些文件中我有意外的变化。使用git diff,我得到: -} \ No newline at end of file +} 怎么解决呢?好吧,我刚刚解决了问题。 您的代码应按以下方式工作(在sed中删除-i之后的冗余项和“”): 或者,您

我尝试使用此命令在我的android项目中查找并替换字符串

find . -name '*.java' -print0 | xargs -0 sed -i "" "s;//\#Logger\.;Logger\.;g"
//#记录器=>记录器

这是工作,但在一些文件中我有意外的变化。使用git diff,我得到:

-}
\ No newline at end of file
+}

怎么解决呢?

好吧,我刚刚解决了问题。 您的代码应按以下方式工作(在sed中删除-i之后的冗余项和“”):

或者,您可以使用并行而不是xargs,并以更快的速度运行:

find . -name '*.java' -print0|parallel -0 sed -i "s;//\#Logger\.;Logger\.;g" {}
并建议在下面找到-执行变量:

find . -name '*.java' -exec sed -i "s;//\#Logger\.;Logger\.;g" {} +;

我想应该是xargs-0sed-I{}“s…”也就是说,你可能忘记了{}sed:{}:没有这样的文件或目录,对吧,请看答案。发现OPs问题以及PHNMNN,问题是,除了换行符问题外,该命令对您有效。但是,我刚刚在Android上尝试了您的命令,正如@RobertNavado所观察到的,Android
sed
不接受BSD样式的
-I”“
选项(空格在
-I
”“
之间)。这真的是你使用的命令吗?你说得对,find-exec是个不错的命令。找出了他的错误,更改了答案..加上1用于发现
-i”“
问题。我尝试了第一个选项,错误:sed:1:“./android\u project/build/…”:无效的命令代码。它似乎是特定于版本的。你能试试-exec变体吗?你在bash和Linux上吗?
find . -name '*.java' -exec sed -i "s;//\#Logger\.;Logger\.;g" {} +;