首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在包含文件名列表的文件中,将“_”替换为“,”

在包含文件名列表的文件中,将“_”替换为“,”
EN

Unix & Linux用户
提问于 2017-07-05 09:07:18
回答 2查看 150关注 0票数 3

如果有人能帮助我编写一个shell脚本以满足以下要求,这将对我很有帮助。

我有一个文本文件,其中包含文件名列表,如下所示:

代码语言:javascript
复制
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中列出的所有文件名:

代码语言:javascript
复制
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
..
..
EN

回答 2

Unix & Linux用户

发布于 2017-07-05 09:13:08

您可以使用一个简单的sed表达式:

代码语言:javascript
复制
sed -Ei 's/^([^_]+)_([^_]+)_/\1,\2,/' file

修改后的file内容:

代码语言:javascript
复制
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
  • i -允许就地修改文件
  • -E -允许扩展正则表达式

简化后的方法如下:

代码语言:javascript
复制
sed -i 's/_/,/; s/_/,/' file
票数 5
EN

Unix & Linux用户

发布于 2017-07-16 03:15:13

简单python脚本

代码语言:javascript
复制
#!/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运算符并将输出发送到文件。

测试:

代码语言:javascript
复制
$ ./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.pdf
票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/375430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档