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

Linux中如何使用tr命令处理字符串?替换指定内容遇异常求助

解决tr命令替换字符串的问题

嗨,我来帮你理清楚这个问题——你用tr命令遇到的异常,其实是因为tr是按单个字符进行替换的工具,根本不支持字符串级别的替换,这就是为什么你的输出会变得乱七八糟!

为什么你的tr命令失效了?

你执行的命令是:

test="biological_process GO:0000001 mitochondrion inheritance is_a GO:0048308 organelle inheritance"
echo $test | tr 'is_a' '\n'

这里的'is_a'被tr解析成了四个独立的字符:i、s、_、a,tr会把原字符串里的每一个这些字符都替换成换行符,所以才会出现b olog c l proce...这种拆碎单词的结果,完全不是你想要的替换整个is_a字符串的效果。

正确的解决方案:用sed或awk处理字符串替换

因为tr不支持字符串替换,我们需要用专门处理文本字符串/正则的工具,比如sed或者awk:

1. 用sed替换is_a为空(也就是删除它,达到你示例里的目标)

test="biological_process GO:0000001 mitochondrion inheritance is_a GO:0048308 organelle inheritance"
echo "$test" | sed 's/is_a//'

执行后就会得到你想要的结果:

biological_process GO:0000001 mitochondrion inheritance GO:0048308 organelle inheritance

2. 如果你确实想把is_a替换成换行符(而不是删除)

用sed的话可以直接写:

echo "$test" | sed 's/is_a/\n/'

(注:如果是非GNU版本的sed,可能需要用printf '\n'来传入换行符,比如sed "s/is_a/$(printf '\n')/")

3. 用awk实现同样效果

删除is_a:

echo "$test" | awk '{sub(/is_a/, "")}1'

替换成换行符:

echo "$test" | awk '{sub(/is_a/, "\n")}1'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:56:53