递归地删除 N 行并在每个匹配模式的文件中添加 M 行
Delete N lines & prepend M lines in each file matching a pattern, recursively
我正在寻求有关优化以下命令的帮助,但也将其写在这里以供参考,以供将来对任何人有所帮助。
我想遍历当前文件夹中的所有 .swift
个文件,并继续递归处理所有子文件夹中的文件,然后执行:
- 删除每个文件中的
N
(低于7)行
- 前置,而不是追加,多行,包含否则可能需要转义的字符(例如
//
)
我想出的解决方案受到 this answer 的启发,并得到了 @EdMorton 的认可,但是读取多行文本以从 file 中添加而不是echo
字符串。
这可能仅在您的路径中没有 space 时才有效。
解决方案
您可以将其复制粘贴到终端中,将 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
改进?
允许 space 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 来启动您的项目。
我正在寻求有关优化以下命令的帮助,但也将其写在这里以供参考,以供将来对任何人有所帮助。
我想遍历当前文件夹中的所有 .swift
个文件,并继续递归处理所有子文件夹中的文件,然后执行:
- 删除每个文件中的
N
(低于7)行 - 前置,而不是追加,多行,包含否则可能需要转义的字符(例如
//
)
我想出的解决方案受到 this answer 的启发,并得到了 @EdMorton 的认可,但是读取多行文本以从 file 中添加而不是echo
字符串。
这可能仅在您的路径中没有 space 时才有效。
解决方案
您可以将其复制粘贴到终端中,将 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
改进?
允许 space 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 来启动您的项目。