批量修改文本文件
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()
虽然这可以完成工作,但还有更快的方法。
我有一百万个 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()
虽然这可以完成工作,但还有更快的方法。