Linux笔记【009】| 文本操作神器

一.常见查看文件命令

1.cat 与tac命令

cat 命令用于连接文件并打印到标准输出设备上。

语法格式:cat [-AbeEnstTuv] [--help] [--version] fileName

参数说明:

  • -n 或 --number:由 1 开始对所有输出的行数编号。

  • -b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。

  • -s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。

  • -v 或 --show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。

  • -E 或 --show-ends : 在每行结束处显示 $。

  • -T 或 --show-tabs: 将 TAB 字符显示为 ^I。

  • -A, --show-all:等价于 -vET。

  • -e:等价于"-vE"选项;

  • -t:等价于"-vT"选项;

tac的功能是将文件从最后一行开始倒过来将内容数据输出到屏幕上。我们可以发现,tac实际上是cat反过来写。

2.head与tail命令

head和tail通常使用在只需要读取文件的前几行或者后几行的情况下使用。

head 命令查看文件头部, -n 选项可以指定查看前几行。

tail 命令查看文件尾部, -n 选项可以指定查看后几行。

3.more与less命令

more的功能是将文件从第一行开始,根据输出窗口的大小,适当的输出文件内容。当一页无法全部输出时,可以用“回车键”向下翻行,或者使用“空格键”向下翻页。退出查看页面,请按“q”键。

more /root/BioInfoData/gencode.v35lift37.annotation.gtf/gencode.v35lift37.annotation.gtf

less的功能和more相似,但是使用more无法向前翻页,只能向后翻。less可以使用【pageup】和【pagedown】键进行前翻页和后翻页,这样看起来更方便。less 命令用来查阅文档,功能更为强大。

less /root/BioInfoData/gencode.v35lift37.annotation.gtf/gencode.v35lift37.annotation.gtf

参考:https://www.cnblogs.com/machangwei-8/p/9570550.html

4.paste命令

用来将多个文件的内容合并,与 cut 命令完成的功能刚好相反。

具体用法:

paste [-s][-d <间隔字符>][--help][--version][文件...]

参数:

  • -d, --delimiters=列表    改用指定列表里的字符替代制表分隔符

  • -s, --serial  不使用平行的行目输出模式,而是每个文件占用一行

  • --help          显示此帮助信息并退出

  • --version         显示版本信息并退出

首先确保两个文件行数相同。paste指令会把每个文件以列对列的方式,一列列地加以合并将每个指定文件里的每一行整合到对应一行里写到标准输出,之间用制表符分隔。如果没有指定文件,或指定文件为"-",程序将从标准输入读取数据。paste 连接文件时,除非指定 -d 选项,否则默认用 空格 或 tab键 分隔文本。

# touch exp1# touch exp2

创建2个文件,exp1和exp2,并自己输入类似的数据。

paste ./temp/info1.txt ./temp/info2.txt

5.cut命令

cut是一个选取命令,就是将一段数据经过分析,取出我们想要的。一般来说,选取信息通常是针对“行”来进行分析的,并不是整篇信息分析的。

其语法格式为:

cut [-bn] [file] 或 cut [-c] [file] 或 cut [-df] [file]

主要参数

  • -b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。

  • -c :以字符为单位进行分割。

  • -d :自定义分隔符,默认为制表符。

  • -f  :与-d一起使用,指定显示哪个区域。

  • -n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的<br />范围之内,该字符将被写出;否则,该字符将被排除。

cut命令主要是接受三个定位方法:

第一,字节(bytes),用选项-b

第二,字符(characters),用选项-c

第三,域(fields),用选项-f

案例:

其实cut的-d选项的默认间隔符就是制表符,所以当你就是要使用制表符的时候,完全就可以省略-d选项,而直接用-f来取域就可以了。

参考:https://blog.csdn.net/zsf8701/article/details/7718680

二.文本处理的2大神器

关于文本操作命令,前面已经介绍了一部分,这里介绍处理文本的三大神器。

1.grep 匹配

grep:一种强大的文本搜索工具,能使用正则表达式匹配模式搜索文本,并把匹配的行打印出来。正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。grep 处理速度非常之快,尽量使用这个命令处理文本。不了解正则表达式,需要去补充一下知识。

知道正则表达式以后,我们就更加容易掌握grep,语法格式如下:

grep [options] pattern file

常用参数:

  • -v 反向选择,即输出没有没有匹配的行

  • -n 显示匹配成功的行所在的行号

  • -c 统计匹配成功的行的数量

  • -w 完全匹配

  • -o 只输出匹配的内容

  • -f 从文件中读取pattern

  • -e 指定多个匹配模式

其他参数:

  • -a 或 --text : 不要忽略二进制的数据。

  • -A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。

  • -b 或 --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。

  • -B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。

  • -c 或 --count : 计算符合样式的列数。

  • -C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。

  • -d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。

  • -e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。

  • -E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。

  • -f<规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。

  • -F 或 --fixed-regexp : 将样式视为固定字符串的列表。

  • -G 或 --basic-regexp : 将样式视为普通的表示法来使用。

  • -h 或 --no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。

  • -H 或 --with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。

  • -i 或 --ignore-case : 忽略字符大小写的差别。

  • -l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称。

  • -L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称。

  • -n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。

  • -o 或 --only-matching : 只显示匹配PATTERN 部分。

  • -q 或 --quiet或--silent : 不显示任何信息。

  • -r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。

  • -s 或 --no-messages : 不显示错误信息。

  • -v 或 --revert-match : 显示不包含匹配文本的所有行。

  • -V 或 --version : 显示版本信息。

  • -w 或 --word-regexp : 只显示全字符合的列。

  • -x --line-regexp : 只显示全列符合的列。

  • -y : 此参数的效果和指定"-i"参数相同。

继续用上面的文件演示。在info1.txt文件中查找Bio

我们搜索“Bio”。搜索出来的结果会标红。

查看一下gtf文件内容的前6行:

head -6 ./temp/gencode.v35lift37.annotation.gtf

关于gtf文件可以参考其他公众号的文章:生信中常见的数据文件格式

我们上面搜索的gene,把含有gene字母的字符串也搜索出来啦,比如:gene_id,假如我们只希望出现gene_id这个单词的结果,那就加上-w参数.

grep -wc gene_id ./temp/gencode.v35lift37.annotation.gtf

可以看到gene就是唯一的精确匹配结果。载加上-c这个参数,返回匹配的结果行数。

grep -wc gene_id ./temp/gencode.v35lift37.annotation.gtf

查找匹配结果反选:

grep -v gene_id ./temp/gencode.v35lift37.annotation.gtf

我再演示一下正则表达式的检索模式,我们检索一下以B开头的行。

要怎么匹配,就按照正则表达式书写匹配模式就行啦。

2.sed流编辑器

sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

(1)sed命令的格式

sed 选项 '动作' 文件名 (【sed [-opitons] 'script' file(s)】

cat 文件名 | sed 选项 '动作'

选项:

  • -n :只显示被修改的行的内容

  • -e :直接在命令列模式上进行 sed 的动作编辑;

  • -f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;

  • -r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)

  • -i :直接修改读取的文件内容,而不是输出到终端。

动作:匹配模式 '/pattern/ command'

  • a:在指定行后新增一行或多行内容

  • c:替换指定行的内容

  • d:删除指定行的内容

  • i :在指定行之前 插入一行或多行内容

  • s:替换指定内容,【格式】 :s/pattern/replacement/[flags],【flags】 数字:新文本替换第几处模式匹配的文本g(global) :新文本将替换所有匹配到的文本

  • p:(print)打印

  • w:(write)

  • r:(read)

  • = :打印行号

  • y:转换

(2)删除行内容

删除第4行的内容

sed "4d" ./temp/info1.txt

删除第2-4行的内容

sed '2,4d' ./temp/info1.txt

删除第3行到最后一行的内容

sed '3,$d' ./temp/info1.txt

在第2行后新增内容

sed '2a YunSen' ./temp/info1.txt

在第3行前插入内容

sed '3i YunSen' ./temp/info1.txt

把第3行的内容替换为Student

sed '3c Student' ./temp/info1.txt

(3)搜索指定内容

搜索含有Bio的行

sed -n '/Bio/p' ./temp/info1.txt

搜索并删除指定内容

sed '/root/d' ./temp/info1.txt

(4)替换指定内容

默认只替换每行中模式首次匹配的内容

sed 's/yunsen/'YunSen'/' ./temp/info1.txt

g标记可以使sed执行全局替换

sed 's/o/'O'/g' ./temp/info1.txt

g标记可以使sed替换第N次即以后出现的匹配

sed 's/o/O/2g' ./temp/info1.txt

(5)直接操作文件内容(危险动作)

直接删除文件内容

sed -i '3d' ./temp/info1.txt

直接替换文件内容

sed -i 's/yunsen/YunSen/g' ./temp/info1.txt

(6)在sed中使用正则表达式

搜索并删除空行

sed '/^$/d' ./temp/info1.txt

参考文章:https://www.cnblogs.com/lfjn/p/11455970.html


除了上面2 个工具外,还有一个awk工具,awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。这个工具后面再介绍。

参考文章:

1.https://www.cnblogs.com/lfjn/p/11455970.html

2.https://blog.csdn.net/zsf8701/article/details/7718680

3.https://www.cnblogs.com/lfjn/p/11455970.html

(0)

相关推荐

  • Linux命令拾遗-文本处理篇

    简介 这是Linux命令拾遗系列的第二篇,本篇主要介绍Linux中与文本处理相关的命令,如xargs.grep.sed.awk等. 本系列文章索引 Linux命令拾遗-入门篇 常用文本相关命令 cat ...

  • 6个使用正则表达式搜索文本中内容的工具

    本指南介绍了一些命令行工具,这些工具可用于搜索文本文件中的匹配字符串或模式.这些工具通常与正则表达式一起使用. |  grep命令 首先出现的是grep实用工具--它是Global Regular E ...

  • 【日更计划061】数字IC基础题

    上期答案 [119] 编写UNIX/Linux命令完成以下任务,假设文件名为file.txt 显示文件的前10行 显示文件的第10行 从文件中删除第13行 从文件中删除最后一行 反转字符串(例如:&q ...

  • 【Linux 笔记】Linux 基本操作 - 01. 系统认知-文本处理-软件安装-环境变量

    【Linux 笔记】Linux 基本操作 - 01. 系统认知-文本处理-软件安装-环境变量

  • 【Linux 笔记】Linux 基本操作 - 04. 利用SRA数据实践文本处理

    笔记接上篇[Linux 笔记]Linux 基本操作 - 03. shell脚本编程.笔记大部分源于生信技能树的B站视频教程[生信技能树]生信人应该这样学linux(更新至第14集),如有需要,可去欣赏 ...

  • 【竺】Linux笔记2——netstat命令

    netstat 功能说明:显示网络状态. 语 法:netstat [-acCeFghilMnNoprstuvVwx] [-A<网络类型>][--ip] 补充说明:利用netstat指令可让 ...

  • 【竺】Linux笔记3——ps -ef|grep详解

    ps命令将某个进程显示出来 grep命令是查找 中间的|是管道命令 是指ps命令与grep同时执行 PS是LINUX下最常用的也是非常强大的进程查看命令 grep命令是查找,是一种强大的文本搜索工具, ...

  • 初学Linux基本的命令操作应当记牢

    Linux管理文件和目录的命令命令功能命令功能pwd显示当前目录ls查看目录下的内容cd改变所在目录cat显示文件的内容grep在文件中查找某字符cp复制文件touch创建文件mv移动文件rm删除文件 ...

  • 【竺】Linux笔记1——基础命令

    Linux是做什么的? 一般用来做服务器端的操作系统, 服务器:提供服务.数据处理.安全 操作系统=开机之后进入的操作环境预览 电脑=硬件+操作系统(软件) 硬件=鼠标.键盘.显示屏.耳机.cpu.主 ...

  • Mac文本操作实用技巧,快速提升你的工作效率!

    找不到 Mac 上的 Home,End,PageUp?想截图还得打开 QQ?不知道 Mac 如何剪切文件?找不到全屏窗口的按钮?找不到隐藏文件夹?不知道如何向后删除?想少用鼠标,多用键盘?小编把自己积 ...

  • 往日投资笔记(009):投资的概率;谁错了

    往日投资笔记(009) 投资的概率 别人太疯狂还是你错了 投资是赌博吗? 投资当然是赌博. 但它与很多靠运气的赌博不同,它可以通过研究.计算,提高自己的获胜概率. 当你无数次进行哪怕胜率只有51%的赌 ...

  • 宇宙笔记009丨记者是个麻烦别人的职业

    獭祭鱼是我个人生活的作业本. [宇宙笔记]是2020年开的新番,番号得名于新闻界前辈.科幻作家韩松的一句话: "每个人都有责任,把自己在这个片段宇宙中的经历,尽可能记录下来,留给另一个宇宙中 ...