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

-fno es compatible en micut(GNU) al menos ..--complementbandera de simplificar las cosas:cut --complement -d ' ' -f5. Recuerde redirigir la salida a un nuevo archivo, luegomvsobre 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
awk '{$ 5 = ""; imprimir} ' archivoComo él y otros han señalado, esto
Un truco para solucionar el tercer problema es
awk '{$ 5 = ""; imprimir} ' archivo | sed 's / / /'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,
awk '{$ 5 = "unicornio"; imprimir} ' archivo | sed 's / * unicornio //'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 / toyboxseds: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