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

使用sed提取文本并处理可能存在的空格问题

我懂你现在的痛点——想用whereis提取命令的手册页目录,还得搞定路径里可能藏着的空格,这在脚本里确实容易踩坑。我给你几个实用的方案,不管路径有没有空格都能正常工作:

方案1:用whereis -m精准定位手册页路径

whereis的-m选项可以只输出手册页相关的内容,省得你去过滤二进制或源码路径。再配合-f选项,能直接去掉开头的命令名,只留路径:

# 获取所有手册页路径(自动跳过命令名)
man_paths=$(whereis -m -f your_command)

# 提取第一个手册页路径(处理空格的关键是用双引号包裹)
# 如果路径里有空格,我们可以用Python帮忙解析(安全且简单)
first_man_path=$(echo "$man_paths" | python -c "import sys; print(sys.stdin.readline().split()[0])")

# 提取目录部分
man_dir=$(dirname "$first_man_path")

# 输出结果
echo "$man_dir"

这个方案用Python来处理带空格的路径拆分,比纯shell更可靠,不用担心空格把路径拆碎。

方案2:纯Shell实现(适合不能用Python的环境)

如果你的环境没有Python,我们可以用正则匹配来提取第一个包含man的路径,即使路径里有空格:

# 获取whereis的完整输出
output=$(whereis your_command)

# 去掉开头的命令名和冒号,只留路径部分
paths=${output#*: }

# 用sed匹配第一个以/开头、包含man的完整路径(直到下一个路径的起始/之前)
first_man_path=$(echo "$paths" | sed -E 's/^(\/.*man.*?)( |$).*/\1/')

# 提取目录
man_dir=$(dirname "$first_man_path")

echo "$man_dir"

这个正则会匹配从第一个/开始,到第一个空格(或行尾)结束的内容,同时确保路径里包含man——不过要注意,如果路径里的空格后面刚好也是/(比如两个手册页路径连在一起),这个方法会更准确。

小提示

如果路径里的空格是因为自定义安装软件导致的,其实可以考虑把软件安装到不带空格的目录里,这样后续脚本处理会省心很多。但如果必须处理空格,上面两个方案都能帮你搞定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:25:33