批量修改文本文件

Batch modify text files

我有一百万个 markdown 文件分布在几个 sub-directories 个文件中,我想更改这些文件的不同标题:

# A Markdown title

---
title: "A Markdown title"
---

…同时保持文件的其余部分完好无损。有任何想法吗? OS X 解决方案首选。

在windows中:使用notepad++ "find in files"选项。它搜索(一组)目录中的所有文件并替换文本。支持正则表达式。

在 mac 上:使用内置于 "find" 的命令行工具。这里有更多信息:Batch replace text inside text file (Linux/OSX Commandline)

您可以使用 sed -i 's/^# \(.*\)$/---\ntitle: \"\"\n---/' ** 表示适用于当前目录下的所有文件。

或者使用 Unix 搜索文件 find。用法示例:

find . -type f -name "*.java" -exec sed 's/^# \(.*\)$/---\ntitle: \"\"\n---/' "{}" > "{}.bak" \; -exec mv "{}.bak" "{}" \;

这将查找所有具有 java 扩展名的文件(在此目录和子目录中)并执行替换。它首先将内容存储在扩展名为 .bak 的文件中,然后将其移动到原始文件中。

您可以使用 find-maxdepth-mindepth 选项调整搜索文件的深度。

假设所有文件都在一个文件夹中,并且标题在第一行,python 执行此操作的脚本如下所示。

for fn in os.listdir('.'):   # itterate through filenames in cwd
    f = open(fn,"rw+")       # make f a file object reading file name
    lines = f.readLines()    # Make an array of lines
    op = "---\n title:" +lines[0][2:]+"\n" #Assuming the title is the first line in the file.
    for k in lines[1:]:
        op += k + \n
    f.truncate()                            # Erase the old file
    f.write(op)                             # Write the file with the new title
    f.close()

虽然这可以完成工作,但还有更快的方法。