删除N行&在每个文件中以递归方式预写与模式匹配的M行



我正在寻求优化以下命令的帮助,但如果将来对任何人都有帮助,我也会将其写在这里作为参考。

我想浏览当前文件夹中的所有.swift文件,并递归地继续使用任何和所有子文件夹中的文件,然后执行:

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

我提出的解决方案受到了这个答案的启发,并得到了@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个路径的空间,而不必使用文件,而是使用一个就地多行解决方案,那会更好,但我遇到了换行和转义//的问题。

用例

我只是用它来替换一个名为"Zhip"的开源iOS Zilliqa钱包中所有Swift文件的文件头。

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

专业提示

按照本指南的建议,通过添加文件IDETemplateMacros.plist来启动您的项目。

相关内容

  • 没有找到相关文章

最新更新