Основное различие между tr (translate) в sed и awk

Как указал @steeldriver, проблема происходит из-за неправильно сконструированного перенаправления io. Вот почему:

    cpp  > 2   &   1

Процесс cpp переводится в фоновый режим, а вывод перенаправляется в файл с именем «2», амперсанд также является разделителем команд, как точка с запятой, поэтому следующая команда в строке - «1», что означает оболочка не может найти.

4
03.03.2018, 23:31
3 ответа

Sí, tres una herramienta "simple" en comparación con awky sed, y tanto awkcomo sedpueden imitar fácilmente la mayoría de su comportamiento básico, pero ninguno de sedo awktiene "trintegrado" en el sentido de que hay algo único en ellos que hace exactamente todas las cosas que hace tr.

trfunciona 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:

  • trtrabaja en caracteres (los cambia o los elimina ).
  • sedtrabaja en líneas (modifica palabras u otras partes de líneas, o inserta o elimina líneas ).
  • awkfunciona en registros con campos (por defecto separados por espacios en blanco en una línea, pero esto se puede cambiar configurando FSyRS).
7
27.01.2020, 20:48

sed tiene un comando yque 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

yno admite rangos de caracteres a-zo clases[:alpha:]como lo hace tr, ni los modos de complemento -cy -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 -. ya veces es útil en medio de un script sedmás largo, pero trprobablemente hace un mejor trabajo si eso es todo lo que está haciendo.

awkno 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.

6
27.01.2020, 20:48
$ echo ooops not good | tr oops nice
iice nit giid
$  echo oops not good | sed 's/oops/nice/'
nice not good
tr переводит символ за символом, а не слово за словом, поэтому он изменит все такие символы, а не только символы, имеющие именно такую ​​последовательность.
0
27.01.2020, 20:48

Теги

Похожие вопросы