You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS环境下无需第三方命令,用sed/grep实现awk '{print $6}'功能

用iOS自带sed/grep实现提取第6列的方案

当然可以!在iOS原生的命令行工具里,完全不需要依赖第三方工具(比如awk、cut),用sed或者grep就能实现和awk '{print $6}'一样的提取第6列的效果。下面针对默认空白符(空格/制表符)分隔的场景,给你几种实用的实现方式:

方法一:用sed直接匹配提取

这是最直接的方式,利用扩展正则精准定位第6列:

sed -E 's/^([^[:space:]]+[[:space:]]+){5}([^[:space:]]+).*/\2/'

原理说明:

  • -E:启用扩展正则表达式(iOS自带的sed支持这个参数)
  • ^([^[:space:]]+[[:space:]]+){5}:匹配开头的前5列内容(每列由「非空白字符+空白分隔符」组成,重复5次)
  • ([^[:space:]]+):捕获第6列的内容
  • .*:匹配第6列之后的所有内容
  • 最后用\2替换整行,只保留捕获到的第6列

方法二:用sed循环删除前5列

如果觉得正则匹配有点绕,也可以用循环删除的思路:

sed -E ':a s/^[^[:space:]]+[[:space:]]+//; ta; s/[[:space:]]+.*//'

原理说明:

  • :a:定义一个名为a的循环标签
  • s/^[^[:space:]]+[[:space:]]+//:删除行首的第一列和后面的空白分隔符
  • ta:如果刚才的替换操作成功,就跳回到标签a继续循环,直到删除完前5列
  • s/[[:space:]]+.*//:删除第6列之后的所有内容,只保留第6列本身

方法三:用grep组合实现

虽然iOS的grep不支持Perl正则,但可以通过两次grep组合来提取:

grep -Eo '([^[:space:]]+[[:space:]]+){5}[^[:space:]]+' | grep -Eo '[^[:space:]]+$'

原理说明:

  • 第一个grep -Eo:匹配并输出「前5列+第6列」的完整内容(-o只输出匹配部分)
  • 第二个grep -Eo:从上面的结果中提取最后一段非空白字符,也就是我们要的第6列

额外注意:

如果你的列分隔符不是空白符(比如逗号、冒号),只需要把上面正则里的[:space:]替换成对应的分隔符即可。另外,如果某行的列数不足6列,这些命令的行为和awk一致——要么输出空内容,要么不匹配输出,你可以根据实际需求调整正则逻辑。

内容的提问来源于stack exchange,提问作者Jacob Collins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:04:58