tr
не интерпретирует классы символов в стиле regex.
[a-zA-Z]
интерпретируется как множество [
, диапазон символов от a
до z
и ]
.
Поэтому его дополнением является множество символов, включающее все символы, кроме [
, диапазон символов от a
до z
и ]
.
Поэтому [
и ]
не заменяются.
Чтобы заменить любой неалфавитный символ, достаточно указать a-zA-Z
в качестве дополнения заменяемого набора:
echo '[[:lower:]]' | tr -c 'a-zA-Z' '\n'
% echo '[[:lower:]]' | tr -c 'a-zA-Z' '\n'
lower
%
La redirección en
cat file1 >file2
es una redirección de salida, mientras que <
especifica una redirección de entrada.
La línea
file2 < cat file1
es lo mismo que
file2 file1 <cat
(no importa mucho dónde ocurre realmente la redirección, ya que el shell la maneja en su propio paso de análisis y luego se elimina del comando real ), lo que significa "ejecutar file2
con file1
como argumento, y redirigir la entrada estándar del archivo cat
".
El error proviene del shell que intenta abrir cat
como un archivo en el directorio actual. El error ocurre antes de que el shell intente ejecutar el comando file2
.
Relacionado:¿Cómo es legal este comando? "> archivo1 < archivo2 gato"