¿Cómo puedo hacer coincidir los espacios en blanco en sed? En mis datos, quiero hacer coincidir todos los 3+ caracteres de espacio en blanco posteriores (espacio de tabulación) y reemplazarlos por 2 espacios. ¿Cómo se puede hacer esto?
¿Cómo puedo hacer coincidir los espacios en blanco en sed? En mis datos, quiero hacer coincidir todos los 3+ caracteres de espacio en blanco posteriores (espacio de tabulación) y reemplazarlos por 2 espacios. ¿Cómo se puede hacer esto?
Respuestas:
La clase de caracteres \s
coincidirá con los caracteres de espacio en blanco <tab>
y <space>
.
Por ejemplo:
$ sed -e "s/\s\{3,\}/ /g" inputFile
sustituirá cada secuencia de al menos 3 espacios en blanco con dos espacios.
OBSERVACIÓN : Para el cumplimiento de POSIX, use la clase de caracteres en [[:space:]]
lugar de \s
, ya que esta última es una extensión de sed de GNU. Consulte las especificaciones POSIX para sed y BRE
sed
tuve que usar [[:space:]]
porque \s
no funcionó para mí. ¿Quizás \s
es una extensión sed de GNU ?
[[:space:]
uno, se podría usar el [[:blank:]]
que solo coincida con pestañas horizontales y espacios (pero sin líneas nuevas, pestañas verticales, etc.).
Esto funciona en MacOS 10.8:
sed -E "s/[[:space:]]+/ /g"
sed "s/[[:space:]]\+/ /g"
hacer coincidir uno o más espacios.
-E
bandera.
Es posible que algunas versiones anteriores de sed no reconozcan \ s como un token de coincidencia de espacios en blanco. En ese caso, puede hacer coincidir una secuencia de uno o más espacios y pestañas con '[XZ] [XZ] *' donde X es un espacio y Z es una pestaña.
sed 's/[ \t]*/"space or tab"/'
sed
cualquier sistema? Si no, podría valer la pena mencionar dónde funciona esto de manera similar a las otras respuestas, solo para que conozcamos las limitaciones y dónde esto podría no tener el resultado deseado.