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

使用sed命令时如何正确转义./作为匹配模式实现字符串截取

问题解决

你要匹配字面量./,需要对sed正则里的两个特殊字符做转义:

  • . 是正则元字符,默认匹配任意单个字符,要匹配字面量点需要加转义符写成\.
  • / 是sed默认的正则分隔符,要匹配字面量斜杠需要加转义符写成\/

替换后的完整命令如下:

lastblock="./2.json"
echo $lastblock | sed '1,/\.\//d;/.json/,$d'

更适配单行路径的优化方案

如果你只是处理单个路径字符串(只有1行输入),原来的行范围删除逻辑其实没必要用,有更简单、可读性更高的写法:

1. 简化sed写法

直接替换首尾的目标字符串即可:

echo $lastblock | sed 's/^\.\///;s/\.json$//'

逻辑说明:

  • s/^\.\/// 匹配行首的./替换为空
  • s/\.json$// 匹配行尾的.json替换为空

2. 纯Bash原生参数扩展(无需调用外部命令)

不用管道、不用sed/grep等外部工具,用Bash内置的参数扩展操作性能更高:

lastblock="./2.json"
# 去除前缀./
temp="${lastblock#./}"
# 去除后缀.json
result="${temp%.json}"
echo "$result"

额外纠正

你之前提到的「grep仅支持对文件操作,无法直接处理标准输出内容」是错误认知,grep完全支持读取管道传入的标准输入,比如echo "test content" | grep "content"是可以正常执行的。


内容的提问来源于stack exchange,提问作者dani 'SO learn value newbies'

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:39:03