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 X
,sed
则将指示对文件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
也会进入子目录。