【发布时间】:2018-07-15 12:46:48
【问题描述】:
我需要通过搜索模式对文件执行替换,并且替换是通过执行另一个提供要用作替换的字符串的命令来获得的。但是,这也需要对目录中的每个文件进行。以下语法不起作用,因为 sed 没有输入文件。
find . type f -exec sed -i "s/<pattern1>/$(sed -n 's/abcd\(pattern2\)efgh/\1/p')/g" {} \;
这个想法是内部 sed 返回 pattern2 以供外部 sed 用作 pattern1 的替代品。但是我需要对目录中的每个文件执行此操作。我无法弄清楚语法。
如果我对内部 sed 使用 find,
find . type f -exec sed -i "s/<pattern1>/$(find . -type f -exec sed -n 's/abcd\(pattern2\)efgh/\1/p' {} \;)/g" {} \;
我以错误结束 sed: -e expression #1, char 53: unterminated 's' command.
我能得到一些帮助吗?
【问题讨论】:
-
我很难理解。 :) 所以对于一个文件,你必须用 N 个文件的 N-x 替换结果替换 1 个模式?对于内部模式,每个文件是否总是有一个匹配项或至少一个匹配项?外部搜索和替换循环的模式列表是否相同?提取模式的文件是否与要修改的文件相同?你能用简单的模式展示一下修改前后的样本数据吗,3-4个文件的2-3行。
-
您可以尝试对文件进行循环。在循环中,您运行 sed,它为您提供 pattern2 并在第二个独立命令中为 patern1 应用 pattern2。
-
有没有涉及到子目录?
-
您希望内部
sed从哪里接收输入? -
@tripleee:这正是要指定的问题