[英]Modify bash variable with sed
为什么以下 bash 脚本不起作用? 我想要 output 两行这样的:
XXXXXXX
YYYYYYY
如果我将 sed 行更改为使用文件名而不是变量,它会起作用,但我想使用变量。
#!/bin/bash
input=$(echo -e '=======\n-------\n')
for sym in = -; do
if [ "$sym" == '-' ]; then
replace=Y
else
replace=X
fi
printf "%s\n" "s/./$replace/g"
done | sed -f- <<<"$input"
主要问题是您给 sed 提供了两个源来读取标准输入:通过 pipe 提供的 for 循环,以及通过 here-string 提供的变量。 事实证明,这里的字符串优先,sed 抱怨命令后面有多余的字符( =
是命令)。
您可以使用进程替换来代替此处的字符串:
for sym in = -; do
if [ "$sym" == '-' ]; then
replace=Y
else
replace=X
fi
printf "%s\n" "s/./$replace/g"
done | sed -f- <(printf '%s\n' '=======' '-------')
但是,您会注意到 output 不是您想要的,即
YYYYYYY
YYYYYYY
这是因为您最终得到的 sed 脚本如下所示:
s/./X/g
s/./Y/g
无论您先做什么,最后一个命令都会用Y
替换所有内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.