sed:如何找到一个不';不包括一个特定的词?

sed:如何找到一个不';不包括一个特定的词?,sed,Sed,我想更新所有不带legacy/的导入语句,并向它们添加legacy/ 当前: import Page from 'ui/components/legacy/Page'; import Foobar from 'ui/components/Foobar'; 预期结果: import Page from 'ui/components/legacy/Page'; import Foobar from 'ui/components/legacy/Foobar'; 使用sed,我将如何使用正则表达

我想更新所有不带
legacy/
的导入语句,并向它们添加
legacy/

当前:

import Page from 'ui/components/legacy/Page';
import Foobar from 'ui/components/Foobar';

预期结果:

import Page from 'ui/components/legacy/Page';
import Foobar from 'ui/components/legacy/Foobar';

使用sed,我将如何使用正则表达式查找包含
组件/(非遗留)
的所有导入语句,并将它们替换为
组件/legacy


find-名称'*.js'-print0 | xargs-0 sed-i''s/???/??/g“
您可以使用此
sed

sed-E'/^import/{/\/legacy\/[^/]+$/!s~/[^/]+$~/legacy&~}文件
从“ui/components/legacy/Page”导入页面;
从“ui/components/legacy/Foobar”导入Foobar;
说明:

  • /^import/
    :仅适用于以
    import
  • {
    :组开始
    • /\/legacy\/[^/]+$/!
      :如果行中没有
      /legacy/
      后跟1+非
      /
      字符
    • s~/[^/]+$~/legacy&~
      :在以行中最后一个
      /
      开头的子字符串之前插入
      /legacy
  • }
    :组结束
结合
查找

find . -name '*.js' -exec sed -i -E '/^import /{ /\/legacy\/[^/]+$/!s~/[^/]+$~/legacy&~;}' {} +

最后我自己给出了答案


find-名称'*.js'-print0 | xargs-0 sed-i”“”/ui\/components\/legacy/!s/ui\/components/ui\/components\/legacy/“

sed具有逻辑NOT运算符。您可以使用
/而不是传统的/!{}
。你能给我看一个完整的正则表达式吗?嗨,我想在查找和替换中使用它。我将如何修改您的正则表达式来实现这一点?我已经在回答中包含了完整的
find
命令。