欢迎关注生信宝典:http://mp.weixin.qq.com/s/cywkIeRbhkYTZvkwTeIVSA

sed基本参数解释

sed是stream editor的简称,擅长对文件进行各种正则操作、插入操作、替换操作和删除操作,可以全局,可以指定特定范围的行或者特定特征的行。

s/pat/replace/: 正则替换

前插行i, 后插行a, 替换行c, 删除行d, 输出行p

N: 读入下一行,同时存储;n:读入下一行,抛弃当前行

常见操作

  • 替换特定的文本
ct@ehbio:~/SXBD$ cat mat
ID  2 cell  4 cell  8 cell  embryo
Pou5f1_1    2   3   4   5
Nanog_1 2   3.2 4.3 5
c-Myc   2   3   4   5
Tet1_3  2   3   4   5
ct@ehbio:~/SXBD$ sed 's/ /_/' mat
ID  2_cell  4 cell  8 cell  embryo
Pou5f1_1    2   3   4   5
Nanog_1 2   3.2 4.3 5
c-Myc   2   3   4   5
Tet1_3  2   3   4   5
ct@ehbio:~/SXBD$ sed 's/ /_/g' mat
ID  2_cell  4_cell  8_cell  embryo
Pou5f1_1    2   3   4   5
Nanog_1 2   3.2 4.3 5
c-Myc   2   3   4   5
Tet1_3  2   3   4   5
  • 获得逗号分隔的一组数
ct@ehbio:~/SXBD$ echo `seq 1 10` | sed 's/ /,/g'
1,2,3,4,5,6,7,8,9,10
  • 针对指定行替换
ct@ehbio:~/SXBD$ sed '2,$ s/_[0-9]//g' mat
ID  2 cell  4 cell  8 cell  embryo
Pou5f1  2   3   4   5
Nanog   2   3.2 4.3 5
c-Myc   2   3   4   5
Tet1    2   3   4   5
  • 替换特定出现位置
# 替换第一个空格
ct@ehbio:~/SXBD$ sed 's/ /_/1' mat
ID  2_cell  4 cell  8 cell  embryo
Pou5f1_1    2   3   4   5
Nanog_1 2   3.2 4.3 5
c-Myc   2   3   4   5
Tet1_3  2   3   4   5
# 替换第二个空格
ct@ehbio:~/SXBD$ sed 's/ /_/2' mat
ID  2 cell  4_cell  8 cell  embryo
Pou5f1_1    2   3   4   5
Nanog_1 2   3.2 4.3 5
c-Myc   2   3   4   5
Tet1_3  2   3   4   5
# 替换第二个及以后的空格
ct@ehbio:~/SXBD$ sed 's/ /_/2g' mat
ID  2 cell  4_cell  8_cell  embryo
Pou5f1_1    2   3   4   5
Nanog_1 2   3.2 4.3 5
c-Myc   2   3   4   5
Tet1_3  2   3   4   5
  • 给序列起名字
ct@ehbio:~/SXBD$ cat seq
ACDGTFGGCATGCDTGD
ACDGAGCDTAGCDGTA
CAGDTAGDCTADTG
ct@ehbio:~/SXBD$ sed = seq
1
ACDGTFGGCATGCDTGD
2
ACDGAGCDTAGCDGTA
3
CAGDTAGDCTADTG
# 同时缓冲两行,但只对第一行行首操作
ct@ehbio:~/SXBD$ sed = seq | sed 'N;s/^/>/;'
>1
ACDGTFGGCATGCDTGD
>2
ACDGAGCDTAGCDGTA
>3
CAGDTAGDCTADTG
  • 给文件增加标题行
ct@ehbio:~/SXBD$ tail -n +2 mat | sort -k2,2n
c-Myc   2   3   4   5
Nanog_1 2   3.2 4.3 5
Pou5f1_1    2   3   4   5
Tet1_3  2   3   4   5# 1 表示第一行
# i 表示插入,在指定行前面插入新行
ct@ehbio:~/SXBD$ tail -n +2 mat | sort -k2,2n | sed '1 i ID\t2_cell\t4_cell\t8_cell\tembryo'
ID  2_cell  4_cell  8_cell  embryo
c-Myc   2   3   4   5
Nanog_1 2   3.2 4.3 5
Pou5f1_1    2   3   4   5
Tet1_3  2   3   4   5
  • 提取特定或指定范围的行
# -n是必须的,阻止程序自动输出匹配行,不然会导致重复输出
ct@ehbio:~/SXBD$ sed -n '2,4p' mat
Pou5f1_1    2   3   4   5
Nanog_1 2   3.2 4.3 5
c-Myc   2   3   4   5
ct@ehbio:~/SXBD$ sed -n '4p' mat
c-Myc   2   3   4   5
  • 提取符合特定模式的行
ct@ehbio:~/SXBD$ sed -n '/_/ p' mat
Pou5f1_1    2   3   4   5
Nanog_1 2   3.2 4.3 5
Tet1_3  2   3   4   5
ct@ehbio:~/SXBD$ sed -n '/-/ p' mat
c-Myc   2   3   4   5
  • 去除文件中的空行
ct@ehbio:~/SXBD$ cat mat
ID  2 cell  4 cell  8 cell  embryo
Pou5f1_1    2   3   4   5
Nanog_1 2   3.2 4.3 5c-Myc   2   3   4   5
Tet1_3  2   3   4   5
# 空行就是只有行首和行尾的行
ct@ehbio:~/SXBD$ sed '/^$/d' mat
ID  2 cell  4 cell  8 cell  embryo
Pou5f1_1    2   3   4   5
Nanog_1 2   3.2 4.3 5
c-Myc   2   3   4   5
Tet1_3  2   3   4   5
  • 原位删除
ct@ehbio:~/SXBD$ cat mat
ID  2 cell  4 cell  8 cell  embryo
Pou5f1_1    2   3   4   5
Nanog_1 2   3.2 4.3 5c-Myc   2   3   4   5
Tet1_3  2   3   4   5# -i 参数的使用
ct@ehbio:~/SXBD$ sed -i '/^$/d' mat
ct@ehbio:~/SXBD$ cat mat
ID  2 cell  4 cell  8 cell  embryo
Pou5f1_1    2   3   4   5
Nanog_1 2   3.2 4.3 5
c-Myc   2   3   4   5
Tet1_3  2   3   4   5
  • 删除指定范围的行
ct@ehbio:~/SXBD$ cat mat
ID  2 cell  4 cell  8 cell  embryo
Pou5f1_1    2   3   4   5
Nanog_1 2   3.2 4.3 5
c-Myc_2 2   3   4   5
Tet1_3  2   3   4   5ct@ehbio:~/SXBD$ sed '2,3d' mat
ID  2 cell  4 cell  8 cell  embryo
c-Myc_2 2   3   4   5
Tet1_3  2   3   4   5
  • 记忆匹配

\(\)启动记忆匹配;\1为第一个匹配项,\2为第二个匹配项;匹配项的计数根据左括号出现的位置来定,第一个(包括起来的为\1

ct@ehbio:~/SXBD$ echo "hah ehbio hah" | sed 's/ \(.*\) /\t\1\t\1\t/'
hah ehbio   ehbio   hah
  • 奇偶数行处理
ct@ehbio:~/SXBD$ echo -e "odd\neven\nodd\neven"
odd
even
odd
even# 奇偶数行合并
ct@ehbio:~/SXBD$ echo -e "odd\neven\nodd\neven" | sed 'N;s/\n/\t/'
odd even
odd even# 取出偶数行,比较简单
# 注意 n (小写)撇掉了奇数行
ct@ehbio:~/SXBD$ echo -e "odd\neven\nodd\neven" | sed -n 'n;p'
even
even# 取出奇数行
# 先都读进去,然后替换偶数行为空值,再输出
ct@ehbio:~/SXBD$ echo -e "odd\neven\nodd\neven" | sed -n 'N;s/\n.*//;p'
odd
odd
  • Windows/Linux换行符困境

Windows下的换行符是\r\n, Linux下换行符是\n, MAC下换行符是\r。所以Windows下的文件拷贝到Linux后,常会出现行尾多一个^M符号的情况,从而引起匹配或其它解析问题。

^M的输是 ctrl+v+M ctrl+v;ctrl+m,不是简单的输入^,再输入M

ct@ehbio:~/SXBD$ cat -A windows.txt
ID^M$
A^M$
B^M$
C^M$
ct@ehbio:~/SXBD$ sed 's/^M//' windows.txt | cat -A
ID$
A$
B$
C$
  • sed中使用bash变量
# 注意双引号的使用
ct@ehbio:~/SXBD$ bash_variable='ehbio'
ct@ehbio:~/SXBD$ echo "sheng xin bao dan " | sed "s/$/$bash_variable/"
sheng xin bao dan ehbio

正则表达式不同语言略有差别,但整体相近,更多正则操作见:不用Linux也可以的强大文本处理方法。

Linux学习 - sed使用相关推荐

  1. 生信宝典Linux学习系列文章整理

    欢迎关注天下博客:http://blog.genesino.com/2017/10/sxbd-linux-summary/ 生信宝典推出的Linux从入门到常用命令.软件安装方法.数据处理方法都在这了 ...

  2. 每日linux命令学习-sed

    Linux的文本处理实用工具主要由sed和awk命令,二者虽然略有差异,但都使用正则表达式,默认使用标准I/O,并且使用管道命令可以将前一个命令的输出作为下一个命令的输入.笔者将在本节学习sed命令. ...

  3. sed是linux命令吗,Linux命令 sed

    一. 以行为单位进行操作. d:删除 $ nl passwd | sed '2,5d'  # 删除第2~5行 $ nl passwd | sed '2d'  # 删除第2行 $ nl passwd | ...

  4. linux我ll查不到usr,Linux学习-文件查寻

    Linux学习---文件查找 grep, egrep, fgrep  :文本查找 文件查找 locate 全系统查找,非实时,模糊匹配.查找时根据全系统文件数据库进行的. 系统在每天的计划任务时间生成 ...

  5. Linux学习 - awk使用

    欢迎关注微信公众号生信宝典:http://mp.weixin.qq.com/s/8wD14FXt7fLDo1BjJyT0ew Linux学习系列文章是生信宝典最开始主推的一块,力图从一个新额视角帮助初 ...

  6. Linux学习 - 常用和不太常用的实用awk命令

    欢迎关注生信宝典:http://mp.weixin.qq.com/s/8wD14FXt7fLDo1BjJyT0ew Linux学习系列文章是生信宝典最开始主推的一块,力图从一个新额视角帮助初学者快速入 ...

  7. Linux学习笔记10

    Linux学习笔记10 Linux学习笔记10 正则表达式 源码包约定目录 Shell脚本约定目录 Shell脚本的创建与执行 date命令 同步时间 Shell脚本预设变量 与用户交互 数学计算 S ...

  8. 批量修改linux换行格式,linux中sed命令批量修改

    sed命令下批量替换文件内容 格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径` 文件名 -i 表示inplace edit,就地修改文件 ...

  9. linux中sed和find,Linux运维知识之Linux 之 sed 与 find 命令结合使用

    本文主要向大家介绍了Linux运维知识之Linux 之 sed 与 find 命令结合使用,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. sed 与 find 命令结合使用 目 ...

最新文章

  1. R语言构建xgboost模型:使用xgboost模型训练tweedie回归模型,特征工程(dataframe转化到data.table、独热编码、缺失值删除、DMatrix结构生成)
  2. 关于成本中心计划与过账
  3. flutter 怎么拦截请求_flutter中事件传递:禁止用户交互 获取点击事件
  4. sql server数据库实现保留指定位数小数的函数
  5. 【2018.4.7】模拟赛之三-ssl2384 字符串【字符串】
  6. 爬虫之祖urlib 简易教程
  7. python爬取商城数据_Python爬取新版CRMEB小程序商城后台订单数据,保存为excel
  8. bzoj 1312: Hard Life 01分数规划+网络流
  9. zabbix监控系统
  10. Linux公社FTP服务器地址及用户名密码
  11. java设备未就绪_java.io.IOException: 设备未就绪。怎么解决?
  12. C语言【微项目01】—电话号码管理系统(文件操作实现)【2021-06-29】
  13. 【微信小程序】轮播图——swpier组件
  14. DCDC--开关频率的选择
  15. 计算机脚本语言是什么?
  16. 在windows cmd中正确使用cd命令切换文件目录
  17. 职场蘑菇不气馁 三招修炼成向日葵
  18. oracle heavy swapping,11gR2新特性:Heavy swapping observed on system in last 5 mins.
  19. App Icon Gear App 图标制作工具
  20. php 证书 paypal,php做贝宝(paypal)支付接口

热门文章

  1. 【软件质量】软件可移植性
  2. 【软件测试】白盒测试の基路径法
  3. 缓存淘汰、缓存穿透、缓存击穿、缓存雪崩、数据库缓存双写一致性
  4. CEPH快速部署(Centos7+Jewel)
  5. React v16.0正式版发布
  6. JAVA编程思想读书笔记(三)--RTTI
  7. tomcat的jdbc连接池PoolExhaustedException 1
  8. ubuntu下安装phpredis的模块扩展
  9. Jackson将json字符串转换成泛型List
  10. POJ3485 区间问题