递归地在每个与模式匹配的文件中删除N行并在M行之前添加M行

时间:2019-01-23 22:39:08

标签: macos file unix prepend

我正在寻求有关优化以下命令的帮助,但如果将来可能对任何人有帮助,也请在此处编写以供参考。

我想浏览当前文件夹中的所有.swift文件,然后递归地继续处理所有子文件夹中的文件,然后执行以下操作:

  1. 删除每个文件中的N(低于7)第一行
  2. 添加(而不是追加)多行,其中包含否则可能需要转义的字符(例如//

1 个答案:

答案 0 :(得分:1)

我想出的解决方案是受this answer的启发,并得到@EdMorton的认可,但是可以读取多行文本以从文件而不是echo开头字符串。

这仅在路径中没有空格的情况下才有效。

解决方案

您可以将其复制粘贴到终端中,用您要删除的行替换8,并用您想要的内容将~/Desktop/TextToPrepend.txt替换为文件路径

find . -name '*.swift' | while IFS= read -r f; do
    cp ~/Desktop/TextToPrepend.txt tmpfile &&
    tail -n +8 "$f" >> tmpfile && 
    mv tmpfile "$f"
done

改进?

允许留有n个路径而不需要使用文件会更好,而是采用就地多行解决方案,但是我遇到了换行符和转义//的问题。

用例

我刚刚将其用于replace the file header for ALL Swift files in an open source iOS Zilliqa wallet called "Zhip"

Xcode中文件标头的标准是在每行以注释//开始。

专业提示

通过将文件IDETemplateMacros.plist添加为suggested by this guide来启动项目。