SPR*_*BRN 11 linux vim sed find-and-replace
我有一个大文本文件(大约 2GB)。我想对同一个文件执行五次搜索和替换操作,并希望在一个命令中完成此操作。通常我使用 vim,打开文件,执行一个替换操作,然后执行下一个操作,等等。有一个问题,因为我注意到在三到四次搜索后 vim 由于内存问题而崩溃。
以下是我在 Vim 中使用的命令的两个示例:
:%s/www\.abcdef/www.test.abcdef/g
:%s/www\.klmnop/www.test.klmnop/g
Run Code Online (Sandbox Code Playgroud)
处理这个问题的最佳方法是什么?
我会像这样使用 sed :
sed -i "s/www\.abcdef/www.test.abcdef/g;s/www\.kmlnop/www.test.klmnop/g;" yourfile.txt
Run Code Online (Sandbox Code Playgroud)
-i选项代表“就地”替换。您可以告诉 sed 创建您的文件的备份,提供此选项的扩展名(-i.bak将 yourfile.txt 备份为 yourfile.txt.bak )。
如果您有更多的搜索模式,您可以将它们保存在一个文件中并从那里读取替换。例如,假设这些是以下内容replacements.txt:
www\.abcdef www.test.abcdef
www\.klmnop www.test.klmnop
Run Code Online (Sandbox Code Playgroud)
然后,您可以阅读 N 个替换列表并将它们替换为:
while read from to; do
sed -i "s/$from/$to/" infile.txt ;
done < replacements.txt
Run Code Online (Sandbox Code Playgroud)
笔记:
replacements.txt.sed每次更换都会运行一个,如果您有很多更换操作,这可能需要一段时间。另一种选择是将上述内容编写为sed脚本:
s/www\.abcdef/www\.test\.abcdef/g;
s/www\.kmlnop/www\.test\.klmnop/g;
s/aaaa/bbbb/g;
s/cccc/dddd/g;
s/eeee/ffff/g;
Run Code Online (Sandbox Code Playgroud)
然后,您可以在您的文件上运行该脚本,它将一次性完成所有替换:
sed -f replace.sed infile.txt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11196 次 |
| 最近记录: |