我有一个方案,我echo
多行,pipe
他们到翻译,如下所示:
echo -n '
$error This is an error$defaults
$fatal THIS IS FATAL ERROR$defaults
This is normal text
' | translate ansi
echo -n '
$error This is an error$defaults
$fatal THIS IS FATAL ERROR$defaults
This is normal text
' | translate html
我首先使用sed
将ansi
替换为html
代码,但由于明显的速度问题,我想做类似的事情:
input="$(cat)"
if [ "$1" == ansi ]
then
error="[1m[31m"
fatal="[0m[30m[41m"
defaults="[0m"
elif [ "$1" == html ]
then
error='<span class="error">'
fatal='<span class="fatal">'
defaults='</span>'
fi
eval "echo "$input""
但是输出是一行的。我尝试了${}
和cat <<
技巧,但没有一个实验给了我想要的输出。
答案 0 :(得分:1)
eval "echo \"$( echo "${input}" )\""
但为什么不直接使用sed(这里使用你的变量名和替换内容
cat > | sed "s/\$error/${error}/g;s/\$fatal/${fatal}/g;s#\$defaults#${defaults}#g'