是否可以将两个tr命令合而为一?

时间:2018-11-08 04:07:08

标签: linux shell ubuntu tr

我有以下两个命令:

tr '[:upper:]' '[:lower:]' < file1.txt > file2.txt
tr -s "[:punct:]" " " < file1.txt > file2.txt

是否可以将它们组合成一个命令?我的以下尝试无效:

tr '[:upper:]' '[:lower:]' | tr -s "[:punct:]" " " < file1.txt > file2.txt

3 个答案:

答案 0 :(得分:1)

您需要将输入重定向放在第一个tr之前,而不是第二个。

tr '[:upper:]' '[:lower:]' < file1.txt | tr -s "[:punct:]" " " > file2.txt

否则,第一个tr尝试从终端而不是文件中读取,而第二个tr从文件而不是管道中读取。

答案 1 :(得分:1)

tr不允许在单个命令行调用上运行多个操作。您将在管道中分叉tr的两个过程,以实现您想要做的事情。但是,如果您可以使用sed(GNU版本),则可以一次执行操作

sed 's/\([A-Z]*\)/\L\1/;s/\([[:punct:]]*\)//g' file1.txt

答案 2 :(得分:0)

您可以仅使用最后一个命令组合这两个命令(因为无论如何,第一个命令的输出都将被丢弃-两个命令都在同一文件中读写)。