是比较两个文件并将结果保存为 sed 脚本的方法吗?
Is way to compare two files and save the result as a sed script?
我有一个基本文件 base.txt 和两个继承自它的文件 A.txt 和 B.txt。我希望 base.txt 中 A.txt 中替换的所有 txt 应用到 B.txt。
diff -u base.txt A.txt | patch B.txt
使用 diff
你会明白 base.txt
和 A.txt
之间的区别。
然后,使用 patch
将差异应用于文件 B.txt
。
您可以在 base.txt 中的文本成功替换 A.txt 时创建 sed 分支并打印,并将输出重定向到更改文件。然后遍历更改文件,将更改应用到 B.txt。
例如
IFS=$(echo -en "\n\b") && for a in $(< base.txt); do sed -in "s/${a}/something/;t a;b b;:a p;:b" A.txt >> change.txt; done
IFS=$(echo -en "\n\b") && for a in $(< change.txt); do sed -in "s/${a}/something/" B.txt; done
在第一个循环中,sed 使用打印命令 p
在与标签 :a
的匹配上分支,如果没有匹配,则逻辑会命中分支并跳过标签 :a
并在不打印的情况下退出。
我有一个基本文件 base.txt 和两个继承自它的文件 A.txt 和 B.txt。我希望 base.txt 中 A.txt 中替换的所有 txt 应用到 B.txt。
diff -u base.txt A.txt | patch B.txt
使用 diff
你会明白 base.txt
和 A.txt
之间的区别。
然后,使用 patch
将差异应用于文件 B.txt
。
您可以在 base.txt 中的文本成功替换 A.txt 时创建 sed 分支并打印,并将输出重定向到更改文件。然后遍历更改文件,将更改应用到 B.txt。
例如
IFS=$(echo -en "\n\b") && for a in $(< base.txt); do sed -in "s/${a}/something/;t a;b b;:a p;:b" A.txt >> change.txt; done
IFS=$(echo -en "\n\b") && for a in $(< change.txt); do sed -in "s/${a}/something/" B.txt; done
在第一个循环中,sed 使用打印命令 p
在与标签 :a
的匹配上分支,如果没有匹配,则逻辑会命中分支并跳过标签 :a
并在不打印的情况下退出。