批量修改文本文件

时间:2015-05-09 23:02:25

标签: regex markdown batch-processing

我有一百万个降价文件,分布在几个子目录文件中,我想要更改不同的标题:

# A Markdown title

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

...同时保持文件的其余部分不变。有任何想法吗? OS X解决方案首选。

3 个答案:

答案 0 :(得分:2)

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

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

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

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

您可以使用find的{​​{1}}和-maxdepth选项调整深度以搜索文件。

答案 1 :(得分:0)

在Windows中:使用记事本++“在文件中查找”选项。它搜索(一组)目录中的所有文件并替换文本。支持正则表达式。

在mac上:使用“find”命令行工具中的内置版本。以下是更多信息:Batch replace text inside text file (Linux/OSX Commandline)

答案 2 :(得分:0)

假设文件都在一个文件夹中并且标题位于第一行,那么执行此操作的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()

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