使用 SED MAC 递归替换所有文件中包含特殊字符的行

使用 SED MAC 递归替换所有文件中包含特殊字符的行

SED我尝试使用on替换一行。MAC OS X Terminal 我遇到一种情况,我需要将目录中所有文件中的一行替换为另一行。这两行都很复杂,并且具有不同的特殊字符和符号。

我该如何更换它?

我需要更换

import { wait } from 'path/and-child-path'

import { wait } from 'path/path/and-child-path'

我尝试的是

find . -type f | xargs sed -i '' "s@import { wait } from 'path/and-child-path'@import { wait } from 'path/and-child-path'@g"

这不管用。请帮帮我。

答案1

您提供的内容sed具有完全相同的匹配和替换模式(假设这不是拼写错误),因此您不能指望文件会有任何变化。此外,该''位不应该存在。

纠正这些观点,你以结束

find . -type f | xargs sed -i \
"s@import { wait } from 'path/and-child-path'@import { wait } from 'path/path/and-child-path'@g"

但该代码仍会失败在一般情况下,因为文件名可能包含空格(甚至换行符!)字符,而这些字符正是xargs用作分隔符的。因此,如果您有文件A Xsed则将指示对文件A和进行操作X

-exec选项直接解决了问题:

find . -maxdepth 1 -type f -exec sed -i \
"s@import { wait } from 'path/and-child-path'@import { wait } from 'path/path/and-child-path'@g" {} +

请注意,我还添加了-maxdepth 1,否则find也会进入子目录。

相关内容