前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux编程学习--文本处理(正则表达,sed,while循环)

Linux编程学习--文本处理(正则表达,sed,while循环)

作者头像
生信技能树
发布2021-12-04 14:20:45
1.4K0
发布2021-12-04 14:20:45
举报
文章被收录于专栏:生信技能树

下面是11月学员的投稿

最近批量下载了ICGC数据库资料,数据库长这样:

下载的数据长这样,存放在我的/bioinformatics/ICGC/SpecimenCentric文件下:

代码语言:javascript
复制
(base)mk@mk:/bioinformatics/ICGC/SpecimenCentric$ ls

发现每个文件名的前缀奇怪的的命名,每个文件最前面多了 sp%2F字符。当然,对于使用惯windows的童鞋,当然是右键→重命名,一个个重复命名就好了。好在文件总共11个,一个个右键重命名也不外乎一两分钟的事。但是问题来了,要是下载的文件成百上千,甚至上万个呢?还是这样笨拙的一个个右键→重命名?跟过Jimmy老师学习过都知道,当然是编程思维解决问题啦。我使用的是Ubuntu Kylin,于是乎,废话不多说,开始实操。

思维就是,grep把"sp%2F"适配出来,然后sed批量替换,最后通过while循环,mv批量重命名。

第一步:需要注意 %符号,要用反斜杠(\)转义

代码语言:javascript
复制
ls|grep 'sp\%2F'
代码语言:javascript
复制
ls|grep 'sp\%2F'|sed s/sp\%2F//g

把最终想要的文件名重定向于file.txt,并查看file.txt,确认最终想要的文件名称。

代码语言:javascript
复制
ls|grep 'sp\%2F'|sed s/sp\%2F//g >file.txt
代码语言:javascript
复制
cat file.txt

第二步,把‘sp%2F’赋值给变量a,方便后续调用(注意,此时不需要转义符(\))。

代码语言:javascript
复制
a='sp%2F'

第三步,检查并构建最后批量重命名命令(mv,while,变量调用),确保无误:

代码语言:javascript
复制
cat file.txt|while read id;do echo "mv $a$id $id";done

可见,变量

a和

id顺利正确调用,mv命令后面旧新文件完全匹配正确。

第四步:把构建好的最终批量调用的命令重定向至file2.txt,后续while循环读取。此时需要会用vim编辑器。

代码语言:javascript
复制
touch file2.txt;vim file2.txt

最后,开始批量完成最终操作:

代码语言:javascript
复制
cat file2.txt|while read id;do $id;done

最后ls检查最终结果:

大功告成。

心得:正如Jimmy老师所说,编程的能力就是解决实际问题能力。要善于发现规律,通过共有规律来批量操作。

大家赶紧去Linux命令行测试一下吧!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 最近批量下载了ICGC数据库资料,数据库长这样:
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档