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

如何用sed移除字符串流中首个单词的最后一个字符?

解决sed移除首个单词最后一个字符的问题

你的命令问题分析

你原来的sed 's/\(\.\)\([^ ]*\) /\2有几个明显问题:

  1. 正则里的\(\.\)是匹配点号,但你的目标字符串20240801T00:48里没有点号,根本匹配不到内容
  2. 后面的[^ ]* (带空格)是匹配“非空格字符+空格”,但你的输入是单个无空格字符串,同样匹配不到
  3. 命令语法不完整,缺少闭合的/',执行本身就会报错

针对需求的正确命令

分两种场景:

  • 场景1:输入只有单个单词(如你的例子20240801T00:48)
    直接匹配行尾的任意字符并删除,命令最简单:
sed 's/.$//'

测试:输入20240801T00:48会输出20240801T00:4

  • 场景2:输入有多个单词,只移除首个单词的最后一个字符
    比如输入20240801T00:48 hello world,要输出20240801T00:4 hello world,可以用:
sed 's/^\(\S*\)./\1/'

解释:^匹配行首,\S*匹配首个单词的所有非空白字符,\( \)分组保存除最后一个字符外的部分,.匹配首个单词的最后一个字符,替换为分组1的内容就完成了删除。

更简洁的优化写法(GNU sed适用)

如果你的环境是GNU sed(大部分Linux系统默认是),可以用\K语法,更直观:

sed 's/^\S*\K.//'

解释:^\S*匹配首个单词的全部内容,\K表示保留前面匹配的内容,只替换后面的.(首个单词的最后一个字符)为空,效果和上面的命令一致,但写法更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:57:03