{"id":218,"date":"2023-08-31T12:07:57","date_gmt":"2023-08-31T10:07:57","guid":{"rendered":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/?page_id=218"},"modified":"2025-03-07T17:31:23","modified_gmt":"2025-03-07T15:31:23","slug":"1-11-2-grep","status":"publish","type":"page","link":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/es\/1-11-2-grep\/","title":{"rendered":"1.11.2. \u00ab<em>grep<\/em>\u00bb"},"content":{"rendered":"<p>En Wikipedia puedes leer que <code>grep<\/code> es una utilidad de l\u00ednea de comando para buscar conjuntos de datos de texto plano en busca de l\u00edneas que coincidan con una expresi\u00f3n regular. Su nombre proviene del comando <code>ed g\/re\/p<\/code> (<strong><em>g<\/em><\/strong><em>lobally search a\u00a0<strong>r<\/strong>egular\u00a0<strong>e<\/strong>xpression and\u00a0<strong>p<\/strong>rint<\/em>, en castellano <em>b\u00fasqueda global de una expresi\u00f3n regular e imprimir<\/em>), que tiene el mismo efecto.<\/p>\n<p>El comando <code>grep<\/code> tiene muchas y variadas caracter\u00edsticas, tanto es as\u00ed que hay libros espec\u00edficos al respecto. El uso m\u00e1s com\u00fan es filtrar l\u00edneas de entrada usando expresiones regulares (en ingl\u00e9s, <em>regexp<\/em>).<\/p>\n<p>Las opciones del comando <code>grep<\/code> com\u00fanmente utilizadas se muestran a continuaci\u00f3n. Los ejemplos se discutir\u00e1n en secciones posteriores.<\/p>\n<ul>\n<li><code>-i<\/code> ignora la distinci\u00f3n entre may\u00fasculas y min\u00fasculas al hacer coincidencias.<\/li>\n<li><code>-v<\/code> imprime solo las l\u00edneas que no coinciden.<\/li>\n<li><code>-n<\/code> agrega un prefijo de n\u00fameros de l\u00ednea a las l\u00edneas de salida.<\/li>\n<li><code>-c<\/code> muestra solo el recuento de l\u00edneas de salida.<\/li>\n<li><code>-l<\/code> imprime solo los nombres de archivo que coinciden con la expresi\u00f3n dada.<\/li>\n<li><code>-L<\/code> imprime los nombres de archivo que no coinciden con el patr\u00f3n.<\/li>\n<li><code>-w<\/code> hace coincidir el patr\u00f3n solamente con palabras completas.<\/li>\n<li><code>-x<\/code> hace coincidir el patr\u00f3n solamente con l\u00edneas completas.<\/li>\n<li><code>-F<\/code> interpreta el patr\u00f3n como una cadena fija (es decir, no como una expresi\u00f3n regular).<\/li>\n<li><code>-o<\/code> imprime solamente las partes coincidentes.<\/li>\n<li><code>-A N<\/code> imprime la l\u00ednea coincidente y <code>N<\/code> l\u00edneas despu\u00e9s de la l\u00ednea coincidente.<\/li>\n<li><code>-B N<\/code> imprime la l\u00ednea coincidente y <code>N<\/code> l\u00edneas antes de la l\u00ednea coincidente.<\/li>\n<li><code>-C N<\/code> imprime la l\u00ednea coincidente y <code>N<\/code> l\u00edneas antes y despu\u00e9s de la l\u00ednea coincidente.<\/li>\n<li><code>-m N<\/code> imprime un m\u00e1ximo de <code>N<\/code> l\u00edneas coincidentes.<\/li>\n<li><code>-q<\/code> sin salida est\u00e1ndar, sale inmediatamente si se encuentra una coincidencia, \u00fatil en <em>scripts<\/em>.<\/li>\n<li><code>-s<\/code> suprime los mensajes de error, \u00fatil en <em>scripts<\/em>.<\/li>\n<li><code>-r<\/code> busca recursivamente todos los archivos en las carpetas de entrada especificadas (por defecto busca en el directorio actual).<\/li>\n<li><code>-R<\/code> como <code>-r<\/code>, pero tambi\u00e9n sigue los enlaces simb\u00f3licos.<\/li>\n<li><code>--color=auto<\/code> resalta las porciones coincidentes, los nombres de archivo, los n\u00fameros de l\u00ednea, etc. usando colores.<\/li>\n<\/ul>\n<h2>B\u00fasqueda literal<\/h2>\n<p>Los siguientes ejemplos tambi\u00e9n ser\u00edan adecuados con la opci\u00f3n <code>-F<\/code>, ya que no utilizan expresiones regulares. El comando <code>grep<\/code> est\u00e1 lo suficientemente bien dise\u00f1ado como para hacer lo correcto en tales casos.<\/p>\n<p># Imprime l\u00edneas que contengan el <code>string 'an'<\/code>. La opci\u00f3n \\n genera una nueva l\u00ednea<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ printf 'manzana\\nbanana\\nmango\\nfigura\\ntango\\n' | grep 'an'<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">banana\r\n\r\nmango\r\n\r\ntango<\/pre>\n<p># Imprime coincidencias sin distinci\u00f3n entre may\u00fasculas y min\u00fasculas<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ printf 'Buho\\nlagartija\\buHoNero\\ntres buhos\\n' | grep -i 'buho'<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">Buho\r\n\r\nbuHoNero\r\n\r\ntres buhos<\/pre>\n<p># Imprime coincidencias de palabras completas<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ printf 'par basico\\nparidad\\n3-par' | grep -w 'par'<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">par basico\r\n\r\n3-par<\/pre>\n<p># Imprime coincidencias de l\u00edneas vac\u00edas y las cuenta<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ printf 'cielo\\n\\ntierra\\n\\n\\n\\ninfierno\\n' | grep -cx ''<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">4<\/pre>\n<p># Imprime coincidencias en una l\u00ednea y las siguientes dos l\u00edneas (A, after)<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ printf 'red\\ncactus\\nsuculenta\\npetunia\\nesqueje' | grep -A2 'cactus'<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">cactus\r\n\r\nsuculenta\r\n\r\npetunia<\/pre>\n<h2>Expresiones regulares<\/h2>\n<p>De forma predeterminada, <em>grep<\/em> trata el patr\u00f3n de b\u00fasqueda como una expresi\u00f3n regular b\u00e1sica (en ingl\u00e9s, <em>Basic Regular Expression<\/em>: BRE).<\/p>\n<ul>\n<li><code>-G<\/code> se puede utilizar para especificar expl\u00edcitamente que se necesita BRE.<\/li>\n<li><code>-E<\/code> habilitar\u00e1 expresiones regulares extendidas (en ingl\u00e9s, <em>Extended Regular Expression<\/em>: ERE). <strong>En GNU <em>grep<\/em>, BRE y ERE solo difieren en c\u00f3mo se especifican los metacaracteres; no hay diferencia en las caracter\u00edsticas. <\/strong><\/li>\n<li><code>-F<\/code> har\u00e1 que los patrones de b\u00fasqueda se traten literalmente.<\/li>\n<li><code>-P<\/code> habilitar\u00e1 expresiones regulares compatibles con Perl, si est\u00e1 disponible (PCRE, por sus siglas en ingl\u00e9s).<\/li>\n<\/ul>\n<p>Las siguientes l\u00edneas son las referencias cuando se quieren usar expresiones regulares extendidas. Existen de varias clases:<\/p>\n<p><strong>Anclas<\/strong><\/p>\n<ul>\n<li>^ restringe la coincidencia al inicio de la cadena.<\/li>\n<li>$ restringe la coincidencia al final de la cadena.<\/li>\n<li>&lt; restringe la coincidencia al inicio de palabra.<\/li>\n<li>&gt; restringe la coincidencia al final de palabra.<\/li>\n<li>\\b restringe la coincidencia al inicio\/final de palabras.<\/li>\n<li>\\B coincide donde \\b no coincide.<\/li>\n<\/ul>\n<p><strong>Metacaracteres y cuantificadores<\/strong><\/p>\n<ul>\n<li>. coincide con cualquier car\u00e1cter, incluyendo el car\u00e1cter de nueva l\u00ednea.<\/li>\n<li>\u00bf coincide 0 o 1 vez.<\/li>\n<li>* coincide 0 o m\u00e1s veces.<\/li>\n<li>+ coincide 1 o m\u00e1s veces.<\/li>\n<li>{m,n} coincide de <em>m<\/em> a <em>n<\/em><\/li>\n<li>{m,} coincide al menos <em>m<\/em><\/li>\n<li>{,n} coincide hasta <em>n<\/em> veces (incluyendo 0 veces).<\/li>\n<li>{n} coincide exactamente <em>n<\/em><\/li>\n<\/ul>\n<p><strong>Clases de caracteres<\/strong><\/p>\n<ul>\n<li>[set123] coincide con cualquiera de estos caracteres una vez.<\/li>\n<li>[^set123] coincide, excepto con cualquiera de estos caracteres, una vez.<\/li>\n<li>[3-7AM-X] rango de caracteres desde 3 hasta 7, <em>A<\/em>, otro rango desde <em>M<\/em> hasta <em>X<\/em>.<\/li>\n<li>\\w similar a [a-zA-Z0-9_] para coincidir con caracteres de palabras.<\/li>\n<li>\\s similar a [ \\t\\n\\r\\f\\v] para coincidir con caracteres de espacio en blanco.<\/li>\n<li>\\W coincide con caracteres que no son de palabras.<\/li>\n<li>\\S coincide con caracteres que no son de espacio en blanco.<\/li>\n<li>[[:digit:]] similar a [0-9] [[:alnum:]_] similar a \\w<\/li>\n<\/ul>\n<p>Se recomienda ver el manual del comando <code>grep<\/code> para ser conscientes de la versatilidad de este comando.<\/p>\n<p><strong>Alternancia y agrupaci\u00f3n<\/strong><\/p>\n<ul>\n<li>Pat1|pat2|pat3 coincide con <em>pat1<\/em> o <em>pat2<\/em> o <em>pat3<\/em>.<\/li>\n<li>() agrupa patrones, a(b|c)d es lo mismo que abd|acd. Tambi\u00e9n sirve como grupo de captura.<\/li>\n<li>\\N referencia hacia atr\u00e1s, proporciona la porci\u00f3n coincidente del N-\u00e9simo grupo de captura.<\/li>\n<li>\\1 referencia hacia atr\u00e1s al primer grupo de captura.<\/li>\n<li>\\2 referencia hacia atr\u00e1s al segundo grupo de captura y as\u00ed sucesivamente hasta \\9.<\/li>\n<\/ul>\n<p>En el manual de <code>grep<\/code> se citan las diferencias entre BRE y ERE. En las expresiones regulares b\u00e1sicas, los metacaracteres ?, +, {, |, (y) pierden su significado especial; en su lugar, se utilizan las versiones con barra invertida \\?,\\ +, \\{,\\ |, \\( <em>y \\)<\/em>.<\/p>\n<p># Imprime la coincidencia cuando el final de la l\u00ednea termina con &#8211;<em>ar<\/em><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ printf 'pedalear\\ncorrer\\nescribir\\namar' | grep 'ar$'<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">pedalear\r\n\r\namar<\/pre>\n<p># Imprime las palabras que comienzan con <code>'par'<\/code>, terminan con <code>'t'<\/code>, y pueden tener <code>'en'<\/code> o <code>'ro'<\/code> en el medio, sin importar si est\u00e1n en may\u00fasculas o min\u00fasculas.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ echo 'par apartment PARROT parent' | grep -ioE 'par(en|ro)?t'<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">part\r\n\r\nPARROT\r\n\r\nParent<\/pre>\n<p># Imprime coincidencia cuando hay texto acotado<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ echo 'Disfruto practicando ejercicios de \"bash\" y \"R\"' | grep -oE '\"[^\"]+\"'<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">\"bash\"\r\n\r\n\"R\"<\/pre>\n<p># L\u00edneas de 8 caracteres que tienen las mismas 3 letras min\u00fasculas al principio y al final<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ grep -xE '([a-z]{3})..\\1' \/usr\/share\/dict\/words<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">mesdames\r\n\r\nrespires\r\n\r\nrestores\r\n\r\ntestates<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>En Wikipedia puedes leer que grep es una utilidad de l\u00ednea de comando para buscar conjuntos de datos de texto plano en busca de l\u00edneas que coincidan con una expresi\u00f3n regular. Su nombre proviene del comando ed g\/re\/p (globally search a\u00a0regular\u00a0expression and\u00a0print, en castellano b\u00fasqueda global de una expresi\u00f3n regular e imprimir), que tiene el [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"acf":[],"_links":{"self":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/es\/wp-json\/wp\/v2\/pages\/218"}],"collection":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/es\/wp-json\/wp\/v2\/comments?post=218"}],"version-history":[{"count":13,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/es\/wp-json\/wp\/v2\/pages\/218\/revisions"}],"predecessor-version":[{"id":1303,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/es\/wp-json\/wp\/v2\/pages\/218\/revisions\/1303"}],"wp:attachment":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/es\/wp-json\/wp\/v2\/media?parent=218"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}