首页 > 解决方案 > 修改管道输入

问题描述

想想字符串,例如:

I have two apples
He has 4 apples 
They have 10 pizzas

我想用不同值的字符串替换我找到的每个数字,用外部脚本计算。就我而言,python 程序digit_to_word.py将数字数字转换为字母格式,但一切都会好起来的,这样我就可以得到这个过程。

预期输出:

I have two apples
He has four apples 
They have ten pizzas

从概念上讲:

echo "He has four apples" |
while read word;
do
    if [[ "$word" == +([0-9+]) ]]; then
    NUM='${python digit_to_word.py "$word"}'
    $word="$NUM"
fi
done |
other_operation... | etc..

从概念上说是因为我什至没有接近让它发挥作用。我什至很难找到关于这个问题的信息,仅仅是因为我不知道如何将它概念化。在这一点上,我主要是在推理过程替换,但恐怕这不是最好的方法。

任何可能非常有用的提示。提前感谢您与我分享您的知识!

标签: bash

解决方案


我建议这对 perl 来说是一个更好的工作。

要重新创建场景:

$ cat digit_to_word.sh
case $1 in
4) echo four;;
8) echo eight;;
10) echo ten;;
*) echo "$1";;
esac
$ bash digit_to_word.sh 10
ten

那么这个

perl -pe 's/(\d+)/ chomp($word = qx{bash digit_to_word.sh $1}); $word /ge' <<END
I have two apples
He has 4 apples
They have 10 pizzas but only 8 cookies
END

输出

I have two apples
He has four apples
They have ten pizzas but only eight cookies

但是,你已经有了一些 python,为什么不在 python 中实现替换部分呢?


推荐阅读