Как указал @steeldriver, проблема происходит из-за неправильно сконструированного перенаправления io. Вот почему:
cpp > 2 & 1
Процесс cpp переводится в фоновый режим, а вывод перенаправляется в файл с именем «2», амперсанд также является разделителем команд, как точка с запятой, поэтому следующая команда в строке - «1», что означает оболочка не может найти.
Sí, tr
es una herramienta "simple" en comparación con awk
y sed
, y tanto awk
como sed
pueden imitar fácilmente la mayoría de su comportamiento básico, pero ninguno de sed
o awk
tiene "tr
integrado" en el sentido de que hay algo único en ellos que hace exactamente todas las cosas que hace tr
.
tr
funciona con caracteres, no con cadenas, y convierte caracteres de un conjunto a caracteres en otro (como en tr 'A-Z' 'a-z'
a minúsculas ). Su nombre es la abreviatura de "traducir" o "transliterar".
Tiene algunas características interesantes, como la posibilidad de eliminar varios caracteres consecutivos que son iguales, lo que puede ser un poco complicado de implementar con una sola expresión sed
.
Por ejemplo,
tr -s '\n'
comprimirá todas las nuevas líneas consecutivas de la entrada en nuevas líneas individuales.
Caracterizar crudamente las tres herramientas:
tr
trabaja en caracteres (los cambia o los elimina ). sed
trabaja en líneas (modifica palabras u otras partes de líneas, o inserta o elimina líneas ). awk
funciona en registros con campos (por defecto separados por espacios en blanco en una línea, pero esto se puede cambiar configurando FS
yRS
).sed
tiene un comando y
que es análogo atr
:
y/string1/string2/
Replace all occurrences of characters in string1 with the corresponding characters in string2.
$ echo 'a big cat' | sed -e 'y/abc/def/'
d eig fdt
y
no admite rangos de caracteres a-z
o clases[:alpha:]
como lo hace tr
, ni los modos de complemento -c
y -C
. La eliminación(-d
)es posible con s//
, al igual que la sustitución de ejecuciones con caracteres individuales(-s
). Como en todo sed
, está fundamentalmente orientado a líneas -. y
a veces es útil en medio de un script sed
más largo, pero tr
probablemente hace un mejor trabajo si eso es todo lo que está haciendo.
awk
no tiene equivalente a la funcionalidad básica de tr
, aunque, por supuesto, podría reemplazar los caracteres uno a la vez. El lenguaje awk es bastante general y puede escribir bucles y condicionales suficientes para implementar cualquier transformación que desee si está lo suficientemente motivado. Si estuviera aún más motivado, probablemente también podría lograrlo en sed
. Las herramientas no son realmente equivalentes en ningún sentido.
$ echo ooops not good | tr oops nice
iice nit giid
$ echo oops not good | sed 's/oops/nice/'
nice not good
tr переводит символ за символом, а не слово за словом, поэтому он изменит все такие символы, а не только символы, имеющие именно такую последовательность.