Quiero eliminar la quinta palabra de cada línea en un archivo.
El contenido actual del archivo:
File is not updated or and will be removed
System will shut down f within 10 seconds
Please save your work 55 or copy to other location
Kindly cooperate with us D
Rendimiento esperado:
File is not updated and will be removed
System will shut down within 10 seconds
Please save your work or copy to other location
Kindly cooperate with us
text-processing
sed
awk
pmaipmui
fuente
fuente
-f
no es compatible en micut
(GNU) al menos ..--complement
bandera de simplificar las cosas:cut --complement -d ' ' -f5
. Recuerde redirigir la salida a un nuevo archivo, luegomv
sobre el original.awk: elimina el quinto campo
Si desea guardar el archivo en su lugar: /programming//q/16529716/7552
Simplemente podría borrar el contenido del quinto campo, pero eso deja 2 separadores de campo de salida consecutivos:
fuente
Con POSIX sed:
fuente
_
y no a nada más entonces:blank:
o:space:
?\(
grupo de captura\)
?Glenn ofreció una solución que es equivalente a
Como él y otros han señalado, esto
Un truco para solucionar el tercer problema es
Esto aún dejará uno o más espacios agregados al final de cualquier línea que tenga cinco o menos palabras. Si puede identificar una palabra que nunca aparecerá en la entrada,
manejará incluso eso (pero aún deja los problemas 1 y 2).
fuente
Una
*
versión más robusta (toma el patrón más largo posible y el patrón con podría perder la separación o la palabra en la primera versión) pero una versión un poco más largafuente
sed 's/[^[:blank:]]*//5'
sed 's/[[:blank:]*[^[:blank:]]*//5'
es mejor. Muy buen punto. Sospeché que tomaría cada carácter individual como una entidad, pero tomaría el mayor patrón sin romper como entidadsed 's/[[:blank:]][^[:blank:]]*//4'
eliminará el quinto campo por completo.sed 's/[[:blank:]][^[:blank:]][^[:blank:]]*//4'
, o, w / GNU / BSD / toyboxsed
s:sed -E 's/[[:blank:]][^[:blank:]]+//4'
.Perl.
fuente
Otra posibilidad, suponiendo un corte GNU:
fuente
Usando Perl> 5.10 (y generando correctamente todas las líneas: 0)): -
fuente