如何在Linux中截取字符串 Linux cut字段分割技巧

cut命令在Linux中用于按字符或字段截取字符串,-c按字符位置、-f按分隔符字段,-d指定单字符分隔符,但不支持多字符分隔符;复杂场景需用awk、sed、grep -o或bash内置操作。

如何在linux中截取字符串 linux cut字段分割技巧

在Linux中,要截取字符串,尤其是基于特定的分隔符进行字段分割,最常用且高效的工具就是

cut

命令。它能帮助我们从文本行中提取出指定列或字符范围,操作直观且性能优异。

解决方案

OK,咱们直接聊聊

cut

这个小工具,它在处理文本数据时简直是利器。我个人觉得,很多时候我们想从日志文件、配置文件或者某个命令的输出中抓取点信息,

cut

就能派上大用场。它的核心思路就是“切”,要么按字符位置切,要么按字段分隔符切。

最常见的用法,当然是按字段分割。比如说,你有一个文件,里面每行都是用冒号

:

分隔的,你想取第三个字段。

cut -d ':' -f 3 filename.txt

这里

-d

就是定义分隔符(delimiter),告诉

cut

用什么字符来“切”。而

-f

则是指定要取哪个字段(field)。这个

-f

后面可以跟单个数字,也可以是范围(如

1-3

表示取第1到第3个字段),或者是不连续的多个字段(如

1,5

表示取第1和第5个字段)。

有时候,文件里可能用的是空格或者制表符做分隔,但它们看起来不那么“规矩”,比如多个空格连在一起。这时候,

cut

默认会把连续的空格或制表符当作一个分隔符,但如果你的数据是严格的一个空格一个字段,那就要小心了。不过,对于很多结构化的文本,比如

/etc/passwd

文件,用冒号做分隔符就非常清晰。

除了按字段,

cut

也能按字符位置来截取。这对于那些没有明确分隔符,但格式固定的数据特别有用。

cut -c 1-5 filename.txt

这个

-c

就是按字符(character)来切。它会从每行的第1个字符开始,一直取到第5个字符。同样,你可以用

1,3,5

来取不连续的字符位置,或者

5-

来表示从第5个字符到行尾。

我发现一个挺有意思的点是,很多人在刚接触

cut

的时候,会混淆

-f

-c

的使用场景。记住,

-f

针对的是“字段”,需要有分隔符;而

-c

针对的是“字符位置”,与分隔符无关。理解这个,基本上

cut

的核心用法就掌握了。

Linux中

cut

命令如何处理复杂或多样的分隔符?

这个问题问得好,因为现实世界的数据可不像教程里那么“干净”。我们经常会遇到用空格、制表符甚至多个字符组合做分隔符的情况。

cut

命令在处理这些“不那么标准”的分隔符时,确实有一些需要注意的地方。

首先,

cut

默认的分隔符是制表符。如果你不指定

-d

,它就按制表符来切。当分隔符是单个字符时,比如逗号

,

、冒号

:

或者管道符

|

,直接用

-d ','

-d '|'

就可以了。但是,如果分隔符是空格,比如

cut -d ' ' -f 2 filename.txt

,这会把每个空格都当作一个分隔符。这意味着,如果你的数据是

a  b   c

(a后面两个空格,b后面三个空格),那么

cut -d ' ' -f 2

取到的可能就不是你想要的

b

,而是一个空字符串,因为第一个空格和第二个空格之间被视为一个字段,但它是空的。

对于这种情况,我通常会倾向于结合

tr

awk

来预处理。比如,如果你想把多个空格缩减成一个空格,然后用

cut

cat filename.txt | tr -s ' ' | cut -d ' ' -f 2
tr -s ' '

会把连续的空格压缩成一个。这样

cut

就能更准确地按单个空格分割了。

另一个常见场景是,分隔符本身是特殊字符,比如

.

*

。在命令行里,这些字符有特殊含义,所以需要转义。但

cut

-d

参数是字面量,它直接接受一个字符作为分隔符,不需要考虑正则表达式的转义。所以

cut -d '.'

来用点号作为分隔符是完全没问题的。

笔魂AI 笔魂AI

笔魂AI绘画-在线AI绘画、AI画图、AI设计工具软件

笔魂AI 403 查看详情 笔魂AI

不过,如果你的分隔符是多个字符组成的字符串,比如

_SPLIT_

,那么

cut

就无能为力了。

cut

只能处理单个字符作为分隔符。这时候,

awk

就是更好的选择。

awk -F '_SPLIT_' '{print $2}' filename.txt
awk

-f

参数可以指定一个字符串作为分隔符,这比

cut

灵活得多。

所以,总结一下:

cut

对单字符分隔符很在行,但遇到多空格、多字符分隔符时,考虑

tr

预处理或直接上

awk

。这是一种经验之谈,选择合适的工具能事半功倍。

除了

cut

,Linux还有哪些高效的字符串截取工具及其适用场景?

确实,

cut

固然好用,但它并非万能。在Linux的命令行世界里,字符串处理的工具箱可丰富着呢。除了

cut

,我个人最常用且觉得效率高的,还有

awk

sed

grep

的组合,甚至

bash

自身的字符串操作功能也挺强大。

awk

:文本处理的瑞士军刀如果说

cut

是小刀,那

awk

就是一把多功能军刀。它在处理复杂字段、多字符分隔符、条件判断以及格式化输出方面,简直是无敌的存在。

场景1:多字符分隔符。 前面提到了,

awk -F 'STRING_DELIMITER' '{print $N}'

可以轻松搞定。场景2:基于内容或条件的截取。 比如,你只想处理包含特定模式的行,或者根据某个字段的值来决定截取哪个字段。

awk '$3 > 10 {print $1, $5}' filename.txt

(打印第三个字段大于10的行的第一和第五个字段)场景3:复杂的输出格式。

awk

可以让你重新组织输出,甚至进行计算。

awk -F ':' '{print "User: " $1 ", UID: " $3}' /etc/passwd
awk

的强大在于它的编程能力,能处理的逻辑远超

cut

sed

:流编辑器,文本替换与截取

sed

主要用于对文本进行流式编辑,最常见的是替换。但它也能用来截取字符串,通常是通过正则表达式匹配然后提取。

场景1:基于正则表达式的复杂模式匹配截取。 比如,你想从日志中提取括号里的内容。

echo "Log entry (important_data_123) details" | sed -n 's/.*((.*)).*/1/p'

这里

s

是替换命令,

.*((.*)).*

是正则表达式,

1

引用了第一个捕获组。

sed -n

配合

p

标志只打印匹配的行。这比

cut

灵活得多,因为

cut

不支持正则表达式。场景2:删除特定部分以达到截取目的。 比如,删除行首或行尾的固定字符。

echo "  hello world  " | sed 's/^ *//; s/ *$//'

(删除行首行尾空格)

sed

的学习曲线可能比

cut

陡峭一些,但一旦掌握,处理各种文本模式会非常高效。

grep

:过滤文本,结合

-o

进行截取

grep

通常是用来搜索文本的,但结合

-o

(only matching) 选项,它也能实现截取功能,只输出匹配到的内容本身。

场景:提取符合特定模式的所有独立匹配。

echo "IP: 192.168.1.10, Gateway: 192.168.1.1" | grep -oE '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}'

这会分别输出

192.168.1.10

192.168.1.1

grep -o

是我个人在快速提取特定格式数据时非常喜欢用的一个技巧。

-E

开启扩展正则表达式,让模式书写更方便。

bash

自身的字符串操作对于脚本编程,

bash

提供了丰富的内置字符串操作,避免了频繁调用外部命令的开销。

场景1:截取固定长度子串。

VAR="abcdefg"
echo "${VAR:0:3}"

输出

abc

(从索引0开始,取3个字符)场景2:从左/右删除匹配模式。

FILE="document.tar.gz"
echo "${FILE%.*}"

输出

document.tar

(从右边删除最短的

.

)

echo "${FILE%%.*}"

输出

document

(从右边删除最长的

.*

)

echo "${FILE#*.}"

输出

tar.gz

(从左边删除最短的

*.

)

echo "${FILE##*.}"

输出

gz

(从左边删除最长的

*.

)这些在编写shell脚本时非常实用,效率也高。

所以,在选择工具时,我会先评估任务的复杂度。如果只是简单的按字段或按字符位置,

cut

是首选;如果涉及多字符分隔符、条件判断或复杂格式化,

awk

出场;需要正则表达式匹配提取,

sed

grep -o

更合适;而在脚本内部,

bash

以上就是如何在Linux中截取字符串 Linux cut字段分割技巧的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/934571.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
零基础学编程应该学什么语言
上一篇 2025年11月29日 14:25:45
Golang 日志输出到文件的策略
下一篇 2025年11月29日 14:25:48

相关推荐

  • 无代码调整聚类热图分支顺序

    无代码调整聚类热图分支顺序无代码调整聚类热图分支顺序无代码调整聚类热图分支顺序无代码调整聚类热图分支顺序

    聚类热图的分支结构会因不同的聚类算法和距离计算方式而有所不同。在保持分支结构不变的前提下,我们有时需要调整热图分支的顺序,以满足特定的需求。这就是文章聚类热图如何按自己的意愿调整分支顺序的出发点。 现在,这种功能已经移植到BIC平台,具体操作如下: 使用之前的绘图数据: 采用默认的绘图参数: 生成的…

    2026年9月23日 用户投稿
    200
  • 高德地图离线地图怎么更新_高德地图离线数据更新步骤

    高德地图车机版离线地图更新方法包括:一、通过Wi-Fi在线更新,进入“离线数据”页面检测并下载新版地图;二、使用U盘导入,从官网下载解压后复制amapauto文件夹至U盘根目录,插入车机并选择更新;三、开启Wi-Fi自动更新功能,在设置中启用“Wi-Fi下自动更新离线数据”及“离线图面增量更新”,实…

    2026年9月23日
    000
  • Java中ConnectException连接异常的解决方法

    答案:Java中ConnectException通常因服务未启动、网络不通或配置错误导致,需检查服务状态、IP端口配置及防火墙设置,并合理设置连接超时与重试机制。 Java中出现ConnectException通常表示应用程序尝试连接到远程服务器时失败,最常见的原因是目标主机拒绝连接或网络不通。这个…

    2026年9月23日
    200
  • VSCode高效配置Elixir:Phoenix框架、中文提示、模式匹配

    要高效配置vscode支持elixir开发,必须安装elixirls扩展并确保elixir和erlang环境正确;elixirls提供代码补全、跳转、格式化和调试功能,配合手动设置.heex、.leex文件关联为html可优化phoenix框架开发体验;通过安装中文语言包、设置files.encod…

    2026年9月23日
    100
  • PHP高效读取大型GZ文件:揭示Gzip的顺序访问限制与实践方法

    本教程深入探讨了php中处理大型gz压缩文件的核心挑战:其固有的顺序访问特性。我们将解释为何无法对gz文件进行随机跳转读取,以及这意味着您必须从头开始按序解压数据。文章将提供一种实用的分块读取策略,并附带php示例代码,帮助开发者高效、安全地处理超大gz文件,同时讨论潜在的跨块数据处理问题及内存管理…

    2026年9月23日
    200
  • 如何在RayTune中训练AI大模型?分布式超参数优化的技巧

    如何在RayTune中训练AI大模型?分布式超参数优化的技巧如何在RayTune中训练AI大模型?分布式超参数优化的技巧如何在RayTune中训练AI大模型?分布式超参数优化的技巧如何在RayTune中训练AI大模型?分布式超参数优化的技巧

    RayTune通过分布式超参数优化解决大模型训练中的资源调度、搜索效率、实验管理与容错难题,其核心是利用并行化和智能调度(如ASHA、PBT)加速最优配置探索。首先,将训练逻辑封装为可调用函数,并在其中集成分布式训练(如PyTorch DDP);其次,定义超参数搜索空间与资源需求(如每试验2 GPU…

    2026年9月23日 用户投稿
    100
  • 鸿蒙3.0将删除谷歌代码,只是为让国产系统更纯粹

    鸿蒙3.0将删除谷歌代码,只是为让国产系统更纯粹鸿蒙3.0将删除谷歌代码,只是为让国产系统更纯粹鸿蒙3.0将删除谷歌代码,只是为让国产系统更纯粹鸿蒙3.0将删除谷歌代码,只是为让国产系统更纯粹

    作为“聚光灯下诞生的国产系统”,华为鸿蒙系统自诞生之日起就引发了激烈的争论。尽管鸿蒙系统已升级至3.0版本,但关于“鸿蒙系统是否是安卓套壳”的讨论依然是焦点。不过,这可能并不是问题的核心。 鸿蒙系统是套壳吗?对于如今的国内科技企业来说,开发一个系统并不困难。然而,为什么最终存活下来的只有MIUI、F…

    2026年9月23日 用户投稿
    100
  • mysql怎么执行子查询 mysql输入嵌套sql语句方法

    mysql怎么执行子查询 mysql输入嵌套sql语句方法mysql怎么执行子查询 mysql输入嵌套sql语句方法mysql怎么执行子查询 mysql输入嵌套sql语句方法mysql怎么执行子查询 mysql输入嵌套sql语句方法

    mysql子查询常见类型包括标量子查询、行子查询和表子查询,分别返回一行一列、一行多列和多行多列数据;应用场景涵盖where作为过滤条件、from作为派生表、select作为标量列以及dml操作的数据提供。此外,根据与外部查询的关联性分为非关联子查询和关联子查询,前者独立执行一次,后者依赖外部查询每…

    2026年9月23日 用户投稿
    100
  • 硬刚 Sora 2,谷歌的 Veo 3.1 确实有小惊喜|AI 上新

    硬刚 Sora 2,谷歌的 Veo 3.1 确实有小惊喜|AI 上新硬刚 Sora 2,谷歌的 Veo 3.1 确实有小惊喜|AI 上新硬刚 Sora 2,谷歌的 Veo 3.1 确实有小惊喜|AI 上新硬刚 Sora 2,谷歌的 Veo 3.1 确实有小惊喜|AI 上新

    谷歌最新视频生成模型 veo 3.1 来了!今日上手可用。 北京时间 10 月 16 日,谷歌在 Gemini API 中发布了 Veo 3.1 和 Veo 3.1 Fast 付费预览版。模型一上线,就受到了行业的高度关注。毕竟,和前不久发布的 Sora 2 一样,这次 Veo 3.1 也新增了音频…

    2026年9月23日 用户投稿
    200
  • Java Optional与集合结合使用方法

    Optional与集合结合可避免空指针异常。1. 用Optional.ofNullable包装可能为null的集合元素;2. Stream中filter后接findFirst返回Optional,安全查找;3. 对象属性为Optional时,通过flatMap展开提取值;4. 方法返回Optiona…

    2026年9月23日
    200
  • vivo X300 Pro首发定制2亿灭霸长焦 韩伯啸:长焦新王

    9月2日,vivo产品经理韩伯啸再次为即将发布的vivo x300系列预热,此次聚焦于旗舰机型vivo x300 pro的影像能力。 韩伯啸指出,X300 Pro搭载了独家深度定制的2亿HPB“灭霸”长焦镜头,标志着vivo在长焦技术上的又一次飞跃。这颗镜头是蓝厂真正意义上的第四代两亿像素长焦系统,…

    2026年9月23日
    000
  • VSCode 怎样用插件实现代码的二维码分享功能 VSCode 代码二维码分享插件的创意使用​

    是的,vscode可通过安装插件实现代码二维码分享功能,具体操作为:1. 打开扩展视图(ctrl+shift+x);2. 搜索“qr code”或“share code”等关键词;3. 选择下载量高、评价好的插件如“code to qr code”并安装;4. 选中代码后右键点击“generate …

    2026年9月23日
    200
  • 抖音小店可以无货源吗?无货源开店

    随着电商行业的不断发展,其在人们日常生活中的地位日益重要。作为当下热门的短视频社交平台,抖音凭借庞大的用户群体和强大的流量支持,吸引了大量商家入驻。很多人开始关注:抖音小店是否可以采用无货源模式运营?本文将带您了解这一新兴电商模式的发展趋势。 一、什么是抖音小店无货源模式? 抖音小店无货源模式是指商…

    2026年9月23日
    000
  • 分享一个服务器一键测试脚本

    superbench是一个测试linux服务器性能的脚本,让你快速方便了解一台服务器的综合性能,支持硬件基本信息、流媒体解锁检测、磁盘io检测、cpu性能测试、以及国内和国外网络测速、网络路由追踪。 以上就是分享一个服务器一键测试脚本的详细内容,更多请关注创想鸟其它相关文章!

    2026年9月22日
    100
  • win11任务栏图标合并了怎么取消_win11任务栏图标合并设置方法

    首先通过系统设置将“合并任务栏按钮”设为从不,若无效则用注册表编辑器新建TaskbarGlomLevel并赋值2,或使用StartAllBack等工具自定义,同时排查第三方软件干扰。 如果您发现Win11任务栏上的程序图标被自动合并,导致无法清晰查看每个应用的独立窗口,可以通过系统设置或高级方法进行…

    2026年9月22日
    100
  • Java ListIterator如何实现双向遍历

    Java中的ListIterator接口支持双向遍历,即可以从前往后,也可以从后往前遍历列表。这与普通的Iterator只能单向向后遍历不同。ListIterator提供了更灵活的操作方式,特别适用于需要反向访问或在遍历过程中修改列表的场景。 1. ListIterator的基本特性 ListIte…

    2026年9月22日
    100
  • Linus Torvalds 批评 Rust 代码格式化工具:称其“完全疯狂”

    近日,linux创始人linus torvalds在linux内核邮件列表中对rust语言的代码格式化工具rustfmt提出了尖锐批评,称其行为“完全疯狂”。 他提到,在Rust代码中,类似use crate::xyz;这样的导入语句,在经过自动格式化后经常被合并为一行,导致原本清晰的结构变得混乱,…

    用户投稿 2026年9月22日
    200
  • mysql如何分析索引使用 mysql创建索引后的执行计划解读

    mysql如何分析索引使用 mysql创建索引后的执行计划解读mysql如何分析索引使用 mysql创建索引后的执行计划解读mysql如何分析索引使用 mysql创建索引后的执行计划解读mysql如何分析索引使用 mysql创建索引后的执行计划解读

    要分析mysql索引使用和执行计划,核心是通过explain命令查看查询路径,并结合handler_read%状态变量评估索引效率。1. 使用explain命令分析执行计划,关注type、key、extra等列,判断是否高效利用索引;2. 通过show global status like &#82…

    2026年9月22日 用户投稿
    100
  • PHP命令怎么获取执行结果_PHP命令执行结果捕获与返回值处理技巧

    使用exec()可捕获命令输出和返回状态,shell_exec()仅获取输出,proc_open()支持精细控制;需用escapeshellarg()等函数确保安全,并优先使用内置函数替代系统命令。 在PHP中执行系统命令并获取其输出结果和返回状态,是很多运维脚本、自动化工具或与外部程序交互场景下的…

    2026年9月22日
    300
  • 解决TCPDF保存文件权限问题的完整指南

    本文旨在解决使用tcpdf在%ignore_a_1%中生成pdf并保存到服务器(’f’模式)时遇到的“permission denied”错误,尤其是在macos环境下。核心问题通常源于不正确的服务器文件路径或目标文件夹缺乏写入权限。教程将详细阐述如何构建正确的绝对文件路径,…

    2026年9月22日
    200

发表回复

登录后才能评论
关注微信