用python3实现linux的sed功能
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用python3实现linux的sed功能相关的知识,希望对你有一定的参考价值。
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作。现在用python简单实现sed的主要命令,将old_text替换为new_text,同时将原来的文件备份,原有的文件被修改。
sed.py的内容如下:
1 import sys 2 import os 3 import shutil 4 5 if len(sys.argv) < 4: 6 sys.exit("usage:sed.py old_text new_text file_name") 7 8 # 假定程序的参数是正确的 9 # 取参数赋值 10 progran_ame, old_text, new_text, arg_file_name = sys.argv 11 print(progran_ame, old_text, new_text, arg_file_name) 12 13 if not os.path.exists(arg_file_name): 14 sys.exit("文件%s不存在" % arg_file_name) 15 16 17 # 判断输入的参数是否为绝对路径, 如果是相对路径则取得绝对路径 18 if os.path.isabs(arg_file_name): 19 src_file = arg_file_name 20 else: 21 src_file = os.path.realpath(arg_file_name) 22 23 # 将原来的文件重新命名,得到备份文件名 24 src_path_name = os.path.dirname(src_file) 25 src_file_name = os.path.basename(src_file) 26 bak_file_name = os.path.splitext(src_file_name)[0]+‘_bak‘+os.path.splitext(src_file_name)[1] 27 back_file = src_path_name+os.sep+bak_file_name 28 29 # 备份文件 30 shutil.copy(src_file, back_file) 31 32 out_file = open(src_file, ‘w‘, encoding=‘utf-8‘) 33 # 对文件的每一行进行遍历,同时进行替换操作 34 with open(back_file, encoding=‘utf-8‘) as f: 35 for line in f: 36 out_file.writelines(line.replace(old_text, new_text)) 37 38 out_file.close()
测试
test.txt文件内容如下
bj您好
我是小笨蛋
欢迎你……bj
python sed.py bj 北京 test.txt
将test.txt中"bj"替换为"北京"
执行后,生成test_bak.txt文件,内容和test.txt一样。test.txt中的内容变为
北京您好
我是小笨蛋
欢迎你……北京
以上是关于用python3实现linux的sed功能的主要内容,如果未能解决你的问题,请参考以下文章
Python3.5 day3作业一:实现简单的shell sed替换功能