首页 > 运维 > linux运维 > 正文

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

P粉602998670
发布: 2025-09-13 09:04:01
原创
226人浏览过
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 字幕工作站,为创作者提供字幕制作、学习资源、会议记录、字幕制作等场景,一键为您的视频生成精准的字幕。

快转字幕357
查看详情 快转字幕

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

_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
登录后复制
自身的字符串操作功能也挺强大。

  1. 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
      登录后复制
  2. 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
      登录后复制
      陡峭一些,但一旦掌握,处理各种文本模式会非常高效。
  3. 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
      登录后复制
      开启扩展正则表达式,让模式书写更方便。
  4. 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字段分割技巧的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号