我有一百万个降价文件,分布在几个子目录文件中,我想要更改不同的标题:
# A Markdown title
到
---
title: "A Markdown title"
---
...同时保持文件的其余部分不变。有任何想法吗? OS X解决方案首选。
答案 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()
虽然这样可以完成工作,但仍有更快的方法。