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

Mac环境下Bash实现单词反转但保持原顺序的技术问询

解决Mac上每行单词单独反转的问题

嘿,我懂你要的效果——让每行里的每个单词各自反转,但单词的原有顺序保持不变对吧?你当前的脚本是直接把整行用rev反转,这会把整个句子的字符顺序都倒过来,自然达不到你想要的结果。下面给你几个在Mac上能正常运行的解决方案:

方法1:用Mac自带的awk(BSD awk)

Mac自带的awk完全可以实现这个需求,核心思路是遍历每行的每个单词,逐个字符反转后替换原单词,最后输出整行:

awk '{
    for (i = 1; i <= NF; i++) {
        len = length($i)
        reversed = ""
        for (j = len; j >= 1; j--) {
            reversed = substr($i, j, 1) reversed
        }
        $i = reversed
    }
    print
}' your_file.txt

把your_file.txt换成你的文件路径就行。这里NF代表当前行的单词数,substr($i, j, 1)用来取出第i个单词的第j个字符,从后往前拼接成反转后的单词。

方法2:用bash结合rev和paste

这种方法更简洁,利用工具链拆分、反转再重组:

input="FILE_PATH"
while IFS= read -r line || [[ -n $line ]]; do
    echo "$line" | tr ' ' '\n' | rev | paste -sd ' ' -
done < "$input"

步骤拆解:

  • tr ' ' '\n':把每行的空格换成换行,让每个单词单独占一行
  • rev:反转每一行(也就是每个单词)
  • paste -sd ' ' -:把所有行用空格连接起来,还原成原来的单词顺序

方法3:用Mac的sed命令

如果你喜欢用sed,可以借助它的命令执行功能来处理每个单词:

sed -E 's/[^[:space:]]+/echo "\0" | rev/ge' your_file.txt
  • [^[:space:]]+:匹配任意非空格的单词(如果你的单词包含特殊字符,这个正则也能覆盖)
  • e标志:让sed把替换后的内容当作shell命令执行
  • \0:代表匹配到的整个单词,每个单词都会被单独传给rev反转

补充:你原有脚本的问题

你原来的代码echo $line | rev是把整行的所有字符反转,比如输入"Test this word"会变成"drow sihT tseT",这和你要的“每个单词单独反转”完全不同,所以才达不到预期效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:18:07