如何编写shell脚本以从标准读取并打印到标准输出?

时间:2013-11-19 01:00:07

标签: bash shell scripting stdout stdin

这是我第一次涉足脚本。

我正在尝试编写一个shell脚本来读取stdin,然后只要有一个“:”将它分成2个变量并添加一个“!”在“:”之后。

我知道我需要利用“读取”实用程序将单词拆分成单独的变量,但除此之外我不太确定。

我可以在几分钟内用Java,C ++或Python完成这项工作。

感谢您的帮助,我很感激。

1 个答案:

答案 0 :(得分:1)

您似乎在询问如何在Bash中实现Java / C ++ / Python模式。由于Bash与这些语言完全不同,所以你得到的答案很可能是笨拙和非惯用的。

考虑解释你拥有的和你想要的东西。

如果你有

foobar
foo:bar
foo:bar:baz

你想要

foobar
foo:!bar
foo:!bar:baz

然后你可以像你描述的那样去Java / etc路线:阅读并检查:如果是这样,将它拆分并添加!,然后写出来:

# Bad way
while IFS= read -r line
do
    if [[ $line == *:* ]]
    then
        first=${line%%:*}
        second=${line#*:}
        echo "$first:!$second"
    else
        echo "$line"
    fi
done

但是,由于Bash不是Java / etc,我们可以使用不同的工具和技术,而且可以做到:

sed -e 's/:/:!/'