Можно ли объединить две команды tr в одну? - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть следующие две команды:

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 голосов
/ 08 ноября 2018

tr не позволяет запускать несколько операций в одном вызове командной строки. Вы должны были бы разветвлять два процесса tr в конвейере, чтобы иметь возможность достичь того, что вы хотели сделать. Но если вы можете использовать sed (версия GNU), вы можете сделать это за одну операцию

sed 's/\([A-Z]*\)/\L\1/;s/\([[:punct:]]*\)//g' file1.txt
0 голосов
/ 08 ноября 2018

Вы можете объединить две команды, используя только последнюю (поскольку вывод первой в любом случае отбрасывается - обе команды читают и записывают из / в одни и те же файлы).

0 голосов
/ 08 ноября 2018

Вам нужно поставить перенаправление ввода перед первым tr, а не вторым.

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

В противном случае первый tr пытается прочитать из терминала вместо файла, а второй tr читает из файла вместо канала.

...