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

如何用sed/awk调用自定义Bash脚本处理文本?

解决方案

首先确保你的prepend_largest_prime.sh脚本功能正常,以下是一个可工作的版本(包含完整的质数计算逻辑):

#!/bin/bash

find_largest_prime() {
    local n=$1
    if (( n < 2 )); then
        echo 2
        return
    fi
    for (( i=n; i>=2; i-- )); do
        local is_prime=1
        for (( j=2; j*j<=i; j++ )); do
            (( i % j == 0 )) && { is_prime=0; break; }
        done
        (( is_prime )) && { echo $i; return; }
    done
}

input="$1"
len=${#input}
prime=$(find_largest_prime "$len")
echo "${prime} ${input}"

给脚本添加执行权限:

chmod +x prepend_largest_prime.sh

方法1:用awk逐行处理文本

awk天生适合逐行处理任务,通过调用外部脚本并捕获输出实现需求:

awk '{
    cmd = "./prepend_largest_prime.sh \"" $0 "\""
    cmd | getline output
    print output
    close(cmd)  # 关闭命令管道避免资源泄漏
}' input.txt

方法2:用sed执行命令替换

sed的e标志可以执行替换后的命令并输出结果,注意引号转义避免参数拆分:

sed -e 's/^/echo "$(./prepend_largest_prime.sh '\''&'\'')"/e' input.txt

你之前用sed失效的常见原因:

  • 未使用e标志:sed默认仅做文本替换,不会执行生成的命令,需要e选项触发执行
  • 引号转义错误:直接传递行内容时未正确转义,导致脚本接收的参数被shell拆分,无法处理含空格的文本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 03:48:20