Tengo un archivo de texto:

deiauk 1611516 afsdf 765 minkra 18415151 asdsf 4152 linkra sfsfdsfs sdfss 4555 deiauk1 sdfsfdsfs 1561 51 deiauk2 115151 5454 4 deiauk 1611516 afsdf ddfgfgd luktol1 4545 4 9 luktol 1 

y yo quiere coincidir exactamente con deiauk. Cuando hago esto:

grep "deiauk" file.txt 

obtengo este resultado:

deiauk 1611516 afsdf 765 deiauk1 sdfsfdsfs 1561 51 deiauk2 115151 5454 4 

pero yo solo necesito esto:

deiauk 1611516 afsdf 765 deiauk 1611516 afsdf ddfgfgd 

Sé que hay «una opción -w, pero luego mi cadena tiene que ser completa línea.

Comentarios

  • ¿Realmente has probado grep -w? (Esa opción es exactamente para ese propósito , y funciona para mí.) – Nota: la opción -x coincide con la línea completa.
  • " Quiero coincidir exactamente con deiauk / " Solo necesito esto: deiauk 1611516 afsdf 765 " – ¿cuál necesitas?

Responder

Pruebe uno de:

grep -w "deiauk" textfile grep "\<deiauk\>" textfile 

Comentarios

  • Si tiene un guión () al final de la cadena, este script lo traerá como resultado, lo cual no se esperaba.
  • Corregir @Eve rt: Las palabras incluyen solo caracteres alfabéticos, dígitos y guiones bajos, por lo que si tiene abreviaturas u otros elementos con guiones, esto no funciona.
  • @Cyrus Aprendí el segundo mientras usaba vi / vim * comando en palabras.
  • No funciona para ningún carácter especial que tenga, por ejemplo, org.apache.avro avro greped con org.apache.avro avro+mapred (probado con *)
  • Use -wE para coincidencia de varias palabras (booleano OR)

Respuesta

Intente esto con GNU grep y marque los límites de las palabras con \b:

grep "\bdeiauk\b" file 

Resultado:

 deiauk 1611516 afsdf 765 

Ver: http://www.regular-expressions.info/wordboundaries.html

Comentarios

  • Gracias, pero ¿por qué esto no funciona para mí? echo "Enter login: " $vard grep -E "$\bvard\b" file.txt
  • Pruebe grep "\b${vard}\b" file.txt
  • todavía no ' no funciona: /
  • Usted ' necesitará read: read -p "Enter login: " vard; grep "\b${vard}\b" file.txt

Responda

Si su grep admite -P (PCRE), puede hacer:

$ grep -P "(^|\s)\Kdeiauk(?=\s|$)" file.txt deiauk 1611516 afsdf 765 deiauk 1611516 afsdf ddfgfgd 

Comentarios

  • Esta es la única respuesta que funciona con palabras con guiones.
  • Por qué es \K ( PCRE reinicia el inicio del partido) ¿es necesario? Esta solución propuesta parece funcionar bien sin ella.

Responder

Dependiendo de sus datos reales, podría busque la palabra seguida de un espacio:

grep "deiauk " file.txt 

Si sabe que tiene que estar al principio de la línea, búsquela:

grep "^deiauk " file.txt 

Comentarios

  • Lamentablemente, todas las respuestas además de esta son incorrectas.
  • @Shatu ¡Gracias! Así que veamos ' s cuánto tiempo tarda en " burbujear hasta la parte superior " … Yo ' tengo curiosidad porque me gusta agregar respuestas a preguntas antiguas … Creo que se supone que sí, pero lo dudo. Sería bueno para mí, pero realmente útil para los lectores. Para que este sea un buen ejemplo de caso, ¿podría pedirle que escriba un comentario que resuma lo que faltan en las otras respuestas?
  • (1) Felicitaciones por llegar a 10K rep. Ahora tiene el privilegio de ver que esta respuesta se dio antes y se eliminó. (2) Siempre es mejor responder la pregunta de la manera más amplia posible, basándose en lo que se dice y no dar una respuesta que funcione solo para los datos de muestra. A partir de los datos de ejemplo de la pregunta, parece que las columnas están separadas por espacios, pero eso no está especificado. Todas las demás respuestas también funcionarán para columnas separadas por tabuladores. (3) Evitó la falla fatal en la respuesta de tachomi (eliminada) agregando ^, pero todas las demás respuestas funcionan… (Continuación)
  • ( Continuación) … si la cadena aparece en un campo diferente al primero. (4) Además, todas las demás respuestas funcionan si deiauk es el último campo (es decir, no hay nada después).

Respuesta

Encontré que -x funcionó para mí.

Ejemplo

$ grep -inx -d skip "favicon.ico" * test.txt:1:favicon.ico 

Grep Manual

-x, --line-regexp Select only those matches that exactly match the whole line. For a regular expression pattern, this is like parenthesizing the pattern and then surrounding it with ^ and $. 

Comentarios

  • Para 1: 1 que coincida con toda la línea que contiene guiones, -x la única opción. Por ejemplo, grep -w "abc" <<<"abc-hac101-bb0" coincidirá pero grep -x "abc" <<<"abc-hac101-bb0" no

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *