¿Cómo elimino las líneas con SED que contienen más de 1 palabra? -- mmand-line campo con text-processing campo con sed camp askubuntu Relacionados El problema

How do I remove lines with sed that contain more than 1 word?


1
vote

problema

Español

Necesito eliminar líneas de un archivo que contenga & gt; 1 palabra. Aquí hay un ejemplo del contenido del archivo:

  This line is not what I need printed-now.   

imprimiría

  This not printed-now.   

He intentado:

  sed -n '/[a-zA-Z]* *[a-zA-Z]/p'   

Esta es una actividad de aprendizaje que me ha perplejo.

Original en ingles

I need to remove lines from a file that contain > 1 word. Here is an example of the file's content:

This line is not what I need printed-now. 

would print

This not printed-now. 

I have tried:

sed -n '/[a-zA-Z]* *[a-zA-Z]/p' 

This is a learning activity that has me stumped.

        
   
   

Lista de respuestas

3
 
vote

con sed puede usar esto:

  sed -i '/w .*/d' file   

o esto, si la primera palabra puede contener algo más que en blanco:

  sed -i '/S .*/d' file   
  • -i : modifique el archivo en su lugar.
  • /w .*/d : Si el patrón /w .*/ (es decir, una palabra, un espacio y todo después de eso) se coincide con, eliminar ( d en el final) toda la linea.
  • abcdefhijklmnabcdefghijklmn7 : Si el patrón /S .*/ (es decir, cualquier cosa menos espacios en blanco, un espacio y todo después de eso) coinciden, elimine ( d en El final) toda la línea.

Tiene muchas opciones para hacer lo mismo con ABCDEFGHIJKLMNABCDEFGHIJKLMN10 . En todos los siguientes casos, ABCDEFGHIJKLMNABCDEFGHIJKLMN11 se utiliza para modificar el archivo en su lugar:

  1. Imprima solo las líneas que no tienen un segundo campo:

      sed -i '/w .*/d' file 2  
  2. Imprimir solo las líneas para las cuales el segundo campo está vacío:

      sed -i '/w .*/d' file 3  
  3. Imprimir solo las líneas para las cuales el número de campos ( sed -i '/w .*/d' file 4 ) es menor que 2 (igual a 1) ( agradece a Steeldriver! ):

      sed -i '/w .*/d' file 5  

    o

      ABCDEFGHIJKLMNABCDEFGHIJKLMN16   
  4. Imprima solo las líneas para las cuales la longitud del segundo campo no es cero:

      sed -i '/w .*/d' file 7  

nota que el sed -i '/w .*/d' file 8 bandera solo funciona para sed -i '/w .*/d' file 9 versiones superiores a 4.1. Para versiones más bajas que esto, el equivalente es para guardar primero en un archivo intermedio y luego cambiar el nombre de este archivo como la inicial. Por ejemplo, la primera opción sería así:

  sed -i '/S .*/d' file 0  

En todos los casos, la salida es esta:

  sed -i '/S .*/d' file 1  
 

With sed you can use this:

sed -i '/\w .*/d' file 

or this, if the first word can contain anything but whitespace:

sed -i '/\S .*/d' file 
  • -i: modify the file in place.
  • /\w .*/d: if the pattern /\w .*/ (i.e. a word, a space and everything after that) is matched, delete (d at the end) the whole line.
  • /\S .*/d: if the pattern /\S .*/ (i.e. anything but whitespace, a space and everything after that) is matched, delete (d at the end) the whole line.

You have many options to do the same thing with awk. In all of the following cases, -i inplace is used to modify the file in place:

  1. Print only the lines which don't have a second field:

    awk -i inplace '!$2' file 
  2. Print only the lines for which the second field is empty:

    awk -i inplace '$2 == ""' file 
  3. Print only the lines for which the number of fields (NF) is smaller than 2 (equal to 1) (thanks steeldriver!):

    awk -i inplace 'NF<2' file 

    or

    awk -i inplace 'NF==1' file 
  4. Print only the lines for which the length of the second field is not zero:

    awk -i inplace '!length($2)' file 

Note that the -i inplace flag works only for awk versions greater than 4.1. For versions lower than this, the equivalent is to first save to an intermediate file and then rename this file as the initial one. For example, the first option would be like this:

awk '!$2' file > tmp && mv tmp file 

In all cases the output is this:

This not printed-now. 
 
 
       
       
1
 
vote

Yo usaría:

  sed -i '/S .*/d' file 2  

(es decir, líneas que contienen algo que no es un espacio, seguido de cualquier número de espacios, seguido de algo que no es un espacio).

  sed -i '/S .*/d' file 3  

se convierte en:

  ABCDEFGHIJKLMNABCDEFGHIJKLMN24   
 

I would use:

sed -E '/\S\s+\S/d' <Data.txt 

(ie, lines that contain something which is not a space, followed by any number of spaces, followed by something which is not a space).

One Item Per line This disappears This also disappears This-remains   Leading-space Trailing-spaces    

becomes:

One Item This-remains   Leading-space Trailing-spaces    
 
 
0
 
vote

Uso

  sed -i '/what I need/c ' filename   

básicamente sigue el enfoque -

  sed -i '/pattern/c line_you_want_to_insert' filename       

aquí line_you_want_to_insert estará en blanco como lo desea eliminado.

 

Use

sed -i '/what I need/c\ ' filename 

Basically it follows the approach-

sed -i '/pattern/c\ line_you_want_to_insert' filename     

Here line_you_want_to_insert will be blank as you want it removed.

 
 

Relacionados problema

15  Regex con comando SED para analizar el texto JSON  ( Regex with sed command to parse json text ) 
Tengo este texto JSON: { "buildStatus" : { "status" : "ERROR", "conditions" : [{ "status" : "OK", "metr...

0  ¿Cómo usar el comando SED para buscar la cadena con "/" personaje en él y reemplazar con alguna otra cadena?  ( How to use of sed command to search string with character in it and replace ) 
He ejecutado el comando: ABCDEFGHIJKLMNABCDEFGHIJKLMN5 En la salida, este comando no reemplaza "http: //" con "www" ¿Por qué? ¿Y cómo cambiar delimita...

3  Eliminar todo antes de la primera ocurrencia de la palabra especificada  ( Remove everything before first occurence of specified word ) 
¿Cómo puedo eliminar todo antes de la primera ocurrencia de una palabra específica usando sed ? lo que he intentado hasta ahora: echo $(cat /etc/nginx/s...

1  SED / AWK - Retire todas las etiquetas, excepto solo dos etiquetas y textos lisos  ( Sed awk remove all tags except only two tags and plain texts ) 
Aquí hay una muestra para mi archivo de texto: <w:r><w:t> <w:r w:rsidR="00D171FD"> <w:t></w:t> </w:r><w:r> <w:t xml:space="preserve"> This is a sample text...

1  El uso de SED para agregar caracteres al final de una línea agrega una nueva línea  ( Using sed to add characters at the end of a line adds a new line ) 
Estoy haciendo un script para convertir algunas listas de cubierta mágicas de un formato a otro. Necesito insertar el código de configuración para cada tarjet...

4  Cómo encontrar texto y reemplazar esa línea si existe con terminal, de lo contrario, solo agrega la línea para terminar  ( How to find text and replace that line if exists with terminal otherwise just ap ) 
Quiero poner en sudo gedit /etc/sysctl.conf la línea vm.swappiness=10 que a veces cambia. De forma predeterminada, esta línea no existe, por lo que util...

1  Reemplace solo ciertos números usando SED [CERRADO]  ( Replace only certain numbers using sed ) 
cerrado . Esta pregunta necesita detalles o claridad . Actualmente no está aceptando respuestas. ...

4  Retire las cotizaciones alrededor de los enteros en un archivo CSV  ( Remove quotes around integers in a csv file ) 
en un archivo CSV grande (& gt; 1 gb) Tengo algo como "34432", "name", "0", "very long description" pero en lugar de eso me gustaría tener 34432, "n...

2  ¿Cómo eliminar programáticamente las nuevas líneas vacías de un archivo?  ( How to programatically remove empty new lines from a file ) 
Necesito eliminar las nuevas líneas vacías del archivo de texto en el terminal. archivo de ejemplo 123 123 123 123 123 123 He buscado en Google u...

7  ¿Cómo reemplazar las cadenas en el archivo sin regex?  ( How to replace strings in file without regex ) 
Necesito reemplazar algunas cadenas en archivos (desde la línea de comandos), pero no quiero usar sed -i porque mi cadena contiene muchos personajes diverti...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos