当前位置:首页>Linux>Linux:文本操作 完整版详细学习笔记

Linux:文本操作 完整版详细学习笔记

  • 2026-10-11 07:28:16
Linux:文本操作 完整版详细学习笔记

注:所有学习材料来自生信技能树(卖萌哥主讲,豆包整理补充,纯实战导向)

内容比较详细,自己使用为主!!


一、核心学习目标

掌握生信分析中90%的文本处理基础操作,能够独立完成测序数据(fastq/gtf/bed等)的查看、筛选、统计和简单编辑,为后续转录组、基因组分析打下基础。

✅ 生信人必须掌握的核心能力:

  • 不用解压直接查看.gz格式的测序数据
  • 快速提取文本文件的指定行、指定列
  • 统计文本的行数、列数、重复项
  • 用vim编辑器简单修改脚本和配置文件

二、前置必懂:Linux文本处理的灵魂

1. 管道符 |

作用:把前一个命令的标准输出,作为后一个命令的标准输入
语法:命令1 | 命令2 | 命令3 ...
✅ 这是Linux最强大的功能,所有复杂的文本处理都是用管道符把简单命令组合起来的。

2. 重定向 >

作用:把命令的输出写入到文件中,而不是显示在屏幕上
语法:命令 > 输出文件名
⚠️ 注意:如果文件已存在,会直接覆盖原文件,不会提示!


第一部分:文本查看命令

1. cat:一次性输出整个文件内容

英文全称:Concatenate
适用场景:查看小文件(<100行),不适合查看大文件(会把整个文件滚动输出到屏幕,卡死终端)

常用参数

参数
作用
生信用途
-n
显示行号
快速定位某一行的内容
-A
显示所有特殊字符(制表符\t、换行符\n等)
排查文件格式错误(比如分隔符是空格还是制表符)

实战用法

# 1. 查看小文件内容
cat readme.txt

# 2. 查看并显示行号
cat -n readme.txt

# 3. 新建文件并写入内容(按Ctrl+C结束输入)
cat > test.txt
Welcome to Biotrainee()!
这是一个测试文件
^C  # 这里是按Ctrl+C,不是输入^C

# 4. 合并多个文件
cat file1.txt file2.txt > merged.txt

生信专属命令:zcat

作用:不用解压直接查看.gz格式的压缩文件
✅ 生信中99%的测序数据都是.gz压缩的,永远不要解压!用zcat直接操作,节省大量磁盘空间和时间

# 查看压缩的fastq文件
zcat reads.1.fq.gz

2. head / tail:查看文件的开头/结尾

适用场景:快速预览大文件的结构,不用打开整个文件
默认行为:不加参数时,显示前10行/后10行

常用参数

参数
作用
-n N
显示前N行/后N行

核心实战技巧:查看文件的中间某几行

✅ 这是本节课最重要的技巧,也是你问的第4题的答案!
原理:先用head取前N行,再用tail从这N行里取最后M行,得到的就是第(N-M+1)到N行

# 通用公式:查看第a行到第b行
head -n b 文件名 | tail -n $((b - a + 1))

# 示例1:查看reads.1.fq.gz的第11到12行(你的作业题)
zcat reads.1.fq.gz | head -n 12 | tail -n 2

# 示例2:查看example.fq的第20行
head -n 20 Data/example.fq | tail -n 1

# 示例3:查看example.fq的第50到100行
head -n 100 Data/example.fq | tail -n 51

其他用法

# 查看example.fq的前20行
head -n 20 Data/example.fq

# 查看.bashrc的最后10行(默认)
tail ~/.bashrc

# 实时查看日志文件的更新(按Ctrl+C退出)
tail -f nohup.out

3. less:分页查看大文件(生信最常用)

英文全称:less is more(比more更强大)
适用场景:查看任何大小的文件,特别是GB级别的测序数据
✅ 老师原话:"生信人90%的时间都在用less看文件,永远不要用cat看大文件!"

常用参数

参数
作用
生信用途
-S
单行显示,不自动换行
查看gtf/vcf等宽表文件,不会乱成一团
-N
显示行号
快速定位行

常用操作(打开文件后)

操作
作用
q
退出less
空格键
向下翻一页
回车键
向下翻一行
b
向上翻一页
y
向上翻一行
/关键词
向下搜索关键词
n
跳转到下一个搜索结果
N
跳转到上一个搜索结果
g
跳到文件开头
G
跳到文件结尾

实战用法

# 1. 普通查看
less Data/example.fq

# 2. 生信标准用法:单行显示+行号
less -SN Data/example.gtf

# 3. 不用解压直接查看.gz压缩文件(zless = zcat | less)
zless -N Data/reads.1.fq.gz

4. more:分页查看(了解即可)

功能和less类似,但更简单,没有向上翻页和搜索功能,现在几乎被less取代,了解即可。


第二部分:文本简单处理命令

1. wc:统计文本信息

英文全称:Word Count
作用:统计文件的行数、单词数、字节数
✅ 生信中最常用的是统计行数,比如统计fastq文件的行数来计算reads数量

常用参数

参数
作用
生信用途
-l
只统计行数
统计测序数据的reads数(fastq每4行一个reads)
-w
只统计单词数
-c
只统计字节数

实战用法

# 1. 统计readme.txt的所有信息(行数 单词数 字节数)
wc readme.txt

# 2. 只统计行数(最常用)
wc -l readme.txt

# 3. 统计fastq文件的reads数(行数除以4)
zcat reads.1.fq.gz | wc -l
# 输出:1000000 → 共有250000条reads

# 4. 管道符用法:统计gtf文件中基因的数量
less Data/example.gtf | cut -f 3 | grep -c "gene"

2. cut:文本切割(提取指定列)

作用:按指定分隔符切割文本,提取指定的列
✅ 生信中最常用的命令之一,用来提取gtf、bed、vcf等表格文件的指定列

常用参数

参数
作用
-d
指定分隔符,默认是制表符\t
-f
指定要提取的列号,列号从1开始

实战用法

# 1. 提取gtf文件的第1列(染色体)、第3列(特征类型)、第4-5列(起始-终止位置)
less -S Data/example.gtf | cut -f 1,3-5

# 2. 按'h'分隔,提取第1列
less -S Data/example.gtf | cut -d 'h' -f 1

# 3. 提取gtf文件的第9列(属性列)
less -S Data/example.gtf | cut -f 9

3. sort:文本排序

作用:对文本的行进行排序
✅ 必须和uniq配合使用,因为uniq只能去除连续的重复行

常用参数

参数
作用
生信用途
-n
按数值从小到大排序
排序基因表达量、染色体位置等数值
-r
倒序排列
从大到小排序
-k N
按第N列排序
按指定列排序
-t
指定分隔符,默认是空白字符

实战用法

# 1. 按gtf文件的第4列(起始位置)排序(默认按字符串排序,错误)
less -S Data/example.gtf | sort -k 4 | less -S

# 2. 按gtf文件的第4列**数值**排序(正确)
less -S Data/example.gtf | sort -n -k 4 | less -S

# 3. 按第3列倒序排序
less -S Data/example.gtf | sort -r -k 3 | less -S

4. uniq:去除重复行

作用:去除连续的重复行
⚠️ 最重要的坑:uniq只能去除连续的重复行!所以必须先sort排序,让重复行挨在一起,再用uniq去重

常用参数

参数
作用
生信用途
-c
统计每个重复行出现的次数
统计基因类型、染色体分布等

实战用法

# ❌ 错误用法:不先sort,结果完全错误
less -S Data/example.gtf | cut -f 3 | uniq

# ✅ 正确用法:先sort,再uniq
less -S Data/example.gtf | cut -f 3 | sort | uniq

# ✅ 统计每个特征类型出现的次数(生信最常用)
less -S Data/example.gtf | cut -f 3 | sort | uniq -c
# 输出示例:
#   29 CDS
#  111 exon
#   20 gene
#    7 start_codon
#    9 stop_codon
#   34 transcript
#   27 UTR

5. paste:文本合并

作用:按行合并多个文件,或者把多行合并成一行

常用参数

参数
作用
-d
指定合并后的分隔符,默认是制表符\t
-s
按行合并(转置)

实战用法

# 1. 按行合并两个文件
paste file1.txt file2.txt > merged.txt

# 2. 生信经典用法:把fastq的每4行合并成一行(方便处理)
less -S Data/example.fq | paste - - - - | less -S

6. tr:字符替换

作用:单个字符的一对一替换、删除、压缩
✅ 只能处理单个字符,不能处理字符串

常用参数

参数
作用
-d
删除指定字符
-s
压缩连续的重复字符

实战用法

# 1. 把所有小写e替换成大写E
cat readme.txt | tr 'e''E'

# 2. 把所有换行符替换成制表符
cat readme.txt | tr '\n''\t'

# 3. 删除所有的'e'字符
cat readme.txt | tr -d 'e'

# 4. 压缩连续的空格为单个空格
cat file.txt | tr -s ' '

第三部分:vim编辑器

vim是Linux系统自带的文本编辑器,功能强大,是生信人修改脚本、配置文件的必备工具。
⚠️ 新手最懵的地方:vim有三种模式,不同模式下的操作完全不同


1. vim的三种模式

打开文件 → 默认进入【命令模式】
          ↓ 按i/a/o
        【编辑模式】(左下角显示INSERT)
          ↓ 按Esc
          回到【命令模式】
          ↓ 按:
        【末行模式】(左下角显示:)
          ↓ 按Esc
          回到【命令模式】
          ↓ 输入:wq
        保存并退出

2. 模式详解与常用操作

(1)命令模式(打开文件默认进入)

作用:移动光标、复制、粘贴、剪切、撤销

操作
作用
移动光标
方向键 / h j k l
左 下 上 右
0
 / ^
跳到行首
$
跳到行尾
gg
跳到文件开头
G
跳到文件结尾
10j
向下移动10行
Ctrl+f
向下翻一页
Ctrl+b
向上翻一页
复制粘贴剪切
yy
复制当前行
10yy
复制当前行及下面10行
dd
剪切(删除)当前行
10dd
剪切当前行及下面10行
p
在当前行下面粘贴
撤销与重做
u
撤销上一步操作
Ctrl+r
重做上一步撤销的操作

(2)编辑模式

作用:正常输入和修改文本

  • 进入方式:在命令模式下按 i(在光标前插入)
  • 退出方式:按 Esc 键回到命令模式

(3)末行模式

作用:保存、退出、查找、替换、设置

命令
作用
保存与退出
:w
保存文件
:wq
 / :x
保存并退出
:q
退出(未修改时)
:q!
不保存,强制退出
显示设置
:set nu
显示行号
:set nonu
隐藏行号
:set list
显示特殊字符
查找与替换
/关键词
向下搜索关键词
n
下一个搜索结果
N
上一个搜索结果
:%s/旧字符串/新字符串/g
全局替换所有旧字符串为新字符串

3. 常见问题与解决

问题:打开文件时出现swap文件报错

E325: ATTENTION
Found a swap file by the name ".readme.txt.swp"

原因:上次编辑文件时异常退出(比如强制关闭终端),vim生成了临时swap文件
解决方法:

  • 如果修改不重要,输入D删除swap文件
  • 如果需要恢复修改,输入R恢复,然后删除swap文件

4. vim中文教程

在终端输入以下命令,即可打开vim的中文交互式教程,跟着练30分钟就能掌握基本操作:

vimtutor zh_CN

四、课堂练习 逐题详细解答

练习1:文本查看

  1. 用cat命令新建一个文本文件catFile,输入一些字符后,打印到屏幕进行查看
cat > catFile
这是第一行
这是第二行
^C  # 按Ctrl+C结束输入
cat catFile
  1. 用head/tail命令查看example.fq的前/后12行
head -n 12 Data/example.fq
tail -n 12 Data/example.fq
  1. 用less -SN命令查看example.gtf
less -SN Data/example.gtf
# 按q退出
  1. 查看reads.1.fq.gz的第11到12行(你的作业题)
zcat reads.1.fq.gz | head -n 12 | tail -n 2

练习2:文本处理

  1. 用less查看example.gtf,然后管道符传递给wc统计行数
less Data/example.gtf | wc -l
  1. 截取example.gtf第9列的内容
less -S Data/example.gtf | cut -f 9
  1. 在第2步的基础上截取分号分割的第1列
less -S Data/example.gtf | cut -f 9 | cut -d ';' -f 1
  1. 在第3步的基础上排序、去重复并统计
less -S Data/example.gtf | cut -f 9 | cut -d ';' -f 1 | sort | uniq -c
  1. 在第4步的基础上,将空格替换成制表符\t
less -S Data/example.gtf | cut -f 9 | cut -d ';' -f 1 | sort | uniq -c | tr -s ' ' | tr ' ''\t'

练习3:vim编辑器

  1. 用vim打开readme.txt文件,在第一行Biotrainee()的括号内填入自己的用户名
vim readme.txt
# 按i进入编辑模式,移动光标到括号内,输入你的用户名
  1. 把第二行剪切掉,要求在命令模式下完成
# 按Esc回到命令模式,移动光标到第二行,按dd
  1. 将第二行的内容粘贴到最后一行的后面
# 按G跳到文件结尾,按p粘贴
  1. 设置vim使其显示行号
# 按:进入末行模式,输入set nu,回车
  1. 不保存,直接退出
# 按:进入末行模式,输入q!,回车

五、生信人专属实战技巧

  1. 永远不要解压.gz格式的测序数据:用zcat/zless直接操作,节省90%的磁盘空间
  2. 永远用less看大文件:不要用cat,cat会把整个文件输出到屏幕,导致终端卡死
  3. sort和uniq永远一起用:uniq只能去除连续的重复行,不先sort结果完全错误
  4. fastq文件行数统计:zcat xxx.fq.gz | wc -l,结果除以4就是reads的数量
  5. 管道符可以无限组合:复杂的文本处理就是把简单命令用管道符串起来

六、新手必踩的10个坑

  1. ❌ 用uniq前不先sort,结果完全错误
  2. ❌ 用cat查看GB级别的大文件,导致终端卡死
  3. ❌ 解压.gz格式的测序数据,浪费大量磁盘空间
  4. ❌ vim编辑完不知道怎么退出,强制关闭终端导致生成swap文件
  5. ❌ 忘记加管道符|,命令不生效
  6. ❌ 文件名写错,特别是大小写和后缀(Linux大小写敏感)
  7. ❌ cut的列号从0开始(实际上是从1开始)
  8. ❌ rm删除文件后想恢复(Linux没有回收站)
  9. ❌ 重定向>覆盖了重要文件(用>>追加,不会覆盖)
  10. ❌ 输入密码时以为键盘坏了(Linux输入密码不显示任何内容)

七、核心命令速查表

命令
常用用法
作用
catcat file
查看小文件
zcatzcat file.gz
查看压缩文件
headhead -n 20 file
查看前20行
tailtail -n 20 file
查看后20行
lessless -SN file
分页查看大文件
zlesszless -SN file.gz
分页查看压缩文件
wcwc -l file
统计行数
cutcut -f 1,3 file
提取第1、3列
sortsort -n -k 4 file
按第4列数值排序
uniq
`sort file
uniq -c`
trtr 'a' 'A' file
字符替换
vimvim file
编辑文件

最新文章

随机文章