我有以下两个命令:
tr '[:upper:]' '[:lower:]' < file1.txt > file2.txt
tr -s "[:punct:]" " " < file1.txt > file2.txt
是否可以将它们组合成一个命令?我的以下尝试无效:
tr '[:upper:]' '[:lower:]' | tr -s "[:punct:]" " " < file1.txt > file2.txt
答案 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)
您可以仅使用最后一个命令组合这两个命令(因为无论如何,第一个命令的输出都将被丢弃-两个命令都在同一文件中读写)。