Linux截取字符串的方法有哪些?

在Linux系统中,字符串截取是文本处理的核心操作之一,无论是系统管理、日志分析还是脚本开发,都频繁需要从文本中提取特定部分的内容,Linux提供了多种命令和工具来实现字符串截取,每种方法都有其适用场景和特点,本文将详细介绍这些方法,并结合实例说明其用法。

linux如何截取字符串

使用cut命令按列或字符截取

cut命令是Linux中最基础的文本截取工具,主要用于按列(以分隔符为界)或按字符位置提取文本内容,其核心功能是通过指定分隔符或字符范围,从每行中筛选出所需部分。

按列截取(基于分隔符)

当文本以特定分隔符(如冒号、逗号、制表符)分隔时,cut可通过-d指定分隔符,-f指定要提取的列号,处理/etc/passwd文件(以冒号分隔用户信息),提取用户名(第1列)和用户ID(第3列):

cut -d: -f1,3 /etc/passwd
  • -d::指定冒号为分隔符;
  • -f1,3:提取第1列和第3列,逗号分隔多列,-f1-3可表示连续列(1到3列)。

按字符位置截取

若需按字符或字节位置截取,可使用-c(字符)或-b(字节)选项,提取字符串"Hello, World!"的第2到5个字符:

echo "Hello, World!" | cut -c2-5

输出为ello,注意:

  • -c按字符计数,支持多字节字符(如中文);
  • -b按字节计数,多字节字符(如UTF-8编码的中文)可能被截断,需谨慎使用。

排除特定列

通过--complement选项可排除指定列,例如提取/etc/passwd中除第2列(密码字段)外的所有列:

cut -d: --complement -f2 /etc/passwd

使用awk命令实现复杂截取

awk是一款强大的文本处理工具,支持模式匹配、条件判断和自定义操作,适合处理复杂格式的文本,其截取功能主要通过字段引用和内置函数实现。

按字段截取(默认以空格分隔)

awk默认将每行按空格/制表符分割为字段,$1$2分别表示第1、第2字段,提取/etc/passwd中的用户名($1)和登录Shell($7):

linux如何截取字符串

awk -F: '{print $1, $7}' /etc/passwd
  • -F::指定冒号为分隔符(覆盖默认空格分隔);
  • {print $1, $7}:打印第1和第7字段,逗号分隔时默认以空格间隔。

使用substr()函数截取子串

awksubstr()函数可按字符位置截取子串,语法为substr(s, start, length),其中s为字符串,start为起始位置(从1开始),length为截取长度。

echo "2023-10-01" | awk '{print substr($0, 1, 4)}'  # 输出年份"2023"
echo "Hello, World!" | awk '{print substr($0, 7, 5)}'  # 输出"World"

结合条件截取

awk支持通过条件语句筛选行后再截取,提取/etc/passwd中UID大于1000的用户名和UID:

awk -F: '$3 > 1000 {print $1, $3}' /etc/passwd

使用sed命令基于模式截取

sed(Stream Editor)主要用于流编辑,但可通过正则表达式匹配并提取文本,其截取功能依赖于p(打印)命令和地址定位。

提取匹配行的特定部分

使用seds命令结合捕获组((...))和替换标记&12等引用捕获内容,提取"IP: 192.168.1.1 Port: 8080"中的IP地址:

echo "IP: 192.168.1.1 Port: 8080" | sed -n 's/.*IP: ([0-9.]+).*/1/p'
  • -n:取消默认输出;
  • s/.*IP: ([0-9.]+).*/1/:匹配IP:后的数字点序列(捕获组1),并替换为捕获内容;
  • p:打印替换后的结果。

提取指定行范围的字段

结合地址定位和sedy/s命令,可提取多行的特定部分,提取文件第2到第5行的第1列:

sed -n '2,5p' file.txt | awk '{print $1}'

使用Shell变量扩展()截取

在Shell脚本中,通过变量扩展可直接截取字符串变量,无需调用外部命令,效率较高。

按字符位置截取

语法为${var:start:length},其中start为起始索引(从0开始),length为截取长度,省略length则截取到末尾。

linux如何截取字符串

str="Hello, World!"
echo ${str:0:5}   # 输出"Hello"(从0开始截取5个字符)
echo ${str:7}     # 输出"World!"(从第7个字符截取到末尾)

按模式截取(删除匹配部分)

通过(前缀匹配,最短)、(前缀匹配,最长)、(后缀匹配,最短)、(后缀匹配, longest)可删除匹配模式并保留剩余部分。

file="test.txt.bak"
echo ${file#*.}      # 输出"txt.bak"(删除第一个点及之前内容)
echo ${file##*.}     # 输出"bak"(删除最后一个点及之前内容)
echo ${file%.*}      # 输出"test.txt"(删除最后一个点及之后内容)
echo ${file%%.*}     # 输出"test"(删除第一个点及之后内容)

不同工具的适用场景对比

为方便选择,以下表格总结各工具的特点和适用场景:

工具 适用场景 优点 缺点
cut 简单按列/字符截取,固定分隔符文本 语法简单,速度快 功能单一,不支持复杂模式匹配
awk 复杂文本处理,条件截取,字段计算 支持正则、条件判断、数学运算 语法稍复杂,学习成本较高
sed 基于模式匹配的截取,流式处理 适合替换和提取匹配片段 需配合正则,易出错
Shell脚本变量截取,无需外部命令 效率高,适合字符串操作 仅限变量,无法处理文件内容

Linux字符串截取方法多样,需根据具体场景选择:

  • 简单列提取优先用cut
  • 复杂格式或条件截取用awk
  • 基于正则模式匹配用sed
  • Shell脚本变量操作用。
    掌握这些工具后,可灵活应对各类文本处理需求,提升工作效率。

FAQs

问题1:如何从文件中提取每行的前5个字符?
解答:可使用cutawk,提取file.txt每行前5个字符:

cut -c1-5 file.txt    # 方法1:cut按字符截取
awk '{print substr($0, 1, 5)}' file.txt  # 方法2:awk的substr函数

问题2:如何截取变量中最后一个点后面的内容(如从”file.txt”中提取”txt”)?
解答:使用Shell变量扩展的或模式删除匹配部分。

file="file.txt"
echo ${file##*.}    # 输出"txt"(删除最后一个点及之前内容)
# 或使用%%(从后匹配最短模式,但需确保唯一性)
echo ${file%.*}     # 输出"file"(删除最后一个点及之后内容,反向操作)

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/31737.html

(0)
酷番叔酷番叔
上一篇 2025年9月28日 10:35
下一篇 2025年9月28日 11:05

相关推荐

  • Linux系统如何进行文件的上传与下载操作?

    在Linux系统中,文件的上传与下载是日常运维和开发中的常见操作,涉及本地与远程服务器、不同协议间的数据传输,根据场景需求,可通过命令行工具高效完成批量操作,或借助图形界面工具实现可视化拖拽,以下详细介绍各类方法,命令行工具:高效灵活的传输方案命令行工具是Linux环境下最常用的传输方式,尤其适合服务器无图形界……

    2025年10月6日
    2300
  • Linux如何更改时区?具体操作步骤与命令详解

    在Linux系统中,正确设置时区对系统日志记录、应用运行时间同步、定时任务执行等至关重要,不同Linux发行版更改时区的方法略有差异,但核心逻辑一致,本文将详细介绍几种主流操作方式,使用timedatectl命令(推荐,适用于systemd系统)现代Linux发行版(如Ubuntu 16.04+、CentOS……

    2025年9月24日
    4200
  • Linux系统如何正确设置Qt配置?

    在Linux系统中配置Qt开发环境是进行跨平台GUI应用开发的基础,本文将详细介绍从Qt安装到环境变量配置、项目构建及常见问题排查的完整流程,帮助开发者快速搭建高效的Qt开发环境,Qt在Linux中的安装方式Qt的安装方式主要有三种:官网离线安装包、在线安装器(Qt Maintenance Tool)以及Lin……

    2025年10月6日
    2900
  • 如何安全删除Linux系统用户文件的操作步骤与注意事项?

    在Linux系统中删除用户文件是一项需要谨慎操作的任务,因为错误的删除可能导致系统故障或数据丢失,无论是删除特定用户的个人文件,还是彻底移除用户及其所有关联数据,都需要遵循规范的流程,并充分理解操作的影响,本文将详细讲解不同场景下的文件删除方法、注意事项及常用工具,帮助用户安全、高效地完成操作,删除前的准备工作……

    2025年9月15日
    4100
  • 镜像文件安装Linux,关键步骤有哪些?问题解答与注意事项详解

    使用镜像文件安装Linux是大多数用户选择的主流方式,相比其他安装方法,镜像文件安装具有系统纯净、版本可控、可自定义安装选项等优势,本文将详细介绍从准备工作到安装完成的完整流程,帮助不同阶段的用户顺利完成Linux系统的部署,安装前的准备工作在开始安装前,充分的准备是确保安装过程顺利的关键,主要包括以下几个方面……

    2025年8月30日
    4900

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信