如果有人能帮助我编写一个shell脚本以满足以下要求,这将对我很有帮助。
我有一个文本文件,其中包含文件名列表,如下所示:
ADB_AR_2006_07.pdf
ADBL_AR_2010_11.pdf
CBL_AR_2013_14.pdf
CZBIL_AR_2007_08.pdf
BOKL_AR_2015_16.pdf
..
..现在,我想将第一个和第二个“_”替换为“,”用于文件名变成的文本file.So中列出的所有文件名:
ADB,AR,2006_07.pdf
ADBL,AR,2010_11.pdf
CBL,AR,2013_14.pdf
CZBIL,AR,2007_08.pdf
BOKL,AR,2015_16.pdf
..
..发布于 2017-07-05 09:13:08
您可以使用一个简单的sed表达式:
sed -Ei 's/^([^_]+)_([^_]+)_/\1,\2,/' file修改后的file内容:
ADB,AR,2006_07.pdf
ADBL,AR,2010_11.pdf
CBL,AR,2013_14.pdf
CZBIL,AR,2007_08.pdf
BOKL,AR,2015_16.pdfi -允许就地修改文件-E -允许扩展正则表达式简化后的方法如下:
sed -i 's/_/,/; s/_/,/' file发布于 2017-07-16 03:15:13
简单python脚本
#!/usr/bin/env python
from __future__ import print_function
import sys
with open(sys.argv[1]) as f:
for line in f:
tokens=line.strip().split('_')
print(",".join(tokens[0:3]),'_',tokens[3],sep='')关键思想是,我们逐行读取文件,在_分隔符处将其分解为各个部分,并使用片表示法[0:3]将前3项与_连接到一个字符串中。如果需要将输出保存为文件,请使用> shell运算符并将输出发送到文件。
测试:
$ ./edit_lines.py input.txt
ADB,AR,2006_07.pdf
ADBL,AR,2010_11.pdf
CBL,AR,2013_14.pdf
CZBIL,AR,2007_08.pdf
BOKL,AR,2015_16.pdfhttps://unix.stackexchange.com/questions/375430
复制相似问题