{"id":689,"date":"2023-10-18T12:05:01","date_gmt":"2023-10-18T10:05:01","guid":{"rendered":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/?page_id=689"},"modified":"2025-02-10T19:06:08","modified_gmt":"2025-02-10T17:06:08","slug":"1-11-2-grep","status":"publish","type":"page","link":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/1-11-2-grep\/","title":{"rendered":"1.11.2. \u00ab<em>grep<\/em>\u00bb"},"content":{"rendered":"<p>A la Wikipedia pots llegir que <code>grep<\/code> \u00e9s una utilitat de l\u00ednia d\u2019ordre per buscar conjunts de dades de text pla a la recerca de l\u00ednies que coincideixin amb una expressi\u00f3 regular. El seu nom prov\u00e9 de l\u2019ordre <code>ed g\/re\/p<\/code> (<strong><em>g<\/em><\/strong><em>lobally search a <strong>r<\/strong>egular <strong>e<\/strong>xpression and <strong>p<\/strong>rint<\/em>, en catal\u00e0 <em>recerca global d\u2019una expressi\u00f3 regular i imprimir<\/em>), que t\u00e9 el mateix efecte.<\/p>\n<p>L\u2019ordre <code>grep<\/code> t\u00e9 moltes i variades caracter\u00edstiques, tant \u00e9s aix\u00ed que hi ha llibres espec\u00edfics al respecte. L\u2019\u00fas m\u00e9s com\u00fa \u00e9s filtrar l\u00ednies d\u2019entrada fent servir expressions regulars (en angl\u00e8s, <em>regexp<\/em>).<\/p>\n<p>Les opcions de l\u2019ordre <code>grep<\/code> comunament utilitzades es mostren a continuaci\u00f3. Els exemples es discutiran en seccions posteriors.<\/p>\n<ul>\n<li><code>-i<\/code> ignora la distinci\u00f3 entre maj\u00fascules i min\u00fascules en fer coincid\u00e8ncies.<\/li>\n<li><code>-v<\/code> imprimeix nom\u00e9s les l\u00ednies que no coincideixen.<\/li>\n<li><code>-n<\/code> agrega un prefix de n\u00fameros de l\u00ednia a les l\u00ednies de sortida.<\/li>\n<li><code>-c<\/code> mostra nom\u00e9s el recompte de l\u00ednies de sortida.<\/li>\n<li><code>-l<\/code> imprimeix nom\u00e9s els noms d\u2019arxiu que coincideixen amb l\u2019expressi\u00f3 donada.<\/li>\n<li><code>-L<\/code> imprimeix els noms d\u2019arxiu que no coincideixen amb el patr\u00f3.<\/li>\n<li><code>-w<\/code> fa coincidir el patr\u00f3 nom\u00e9s amb paraules completes.<\/li>\n<li><code>-x<\/code> fa coincidir el patr\u00f3 nom\u00e9s amb l\u00ednies completes.<\/li>\n<li><code>-F<\/code> interpreta el patr\u00f3 com una cadena fixa (\u00e9s a dir, no com una expressi\u00f3 regular).<\/li>\n<li><code>-o<\/code> imprimeix nom\u00e9s les parts coincidents.<\/li>\n<li><code>-A N<\/code> imprimeix la l\u00ednia coincident i <code>N<\/code> l\u00ednies despr\u00e9s de la l\u00ednia coincident.<\/li>\n<li><code>-B N<\/code> imprimeix la l\u00ednia coincident i <code>N<\/code> l\u00ednies abans de la l\u00ednia coincident<\/li>\n<li><code>-C N<\/code> imprimeix la l\u00ednia coincident i <code>N<\/code> l\u00ednies abans i despr\u00e9s de la l\u00ednia coincident.<\/li>\n<li><code>-m N<\/code> imprimeix un m\u00e0xim de <code>N<\/code> l\u00ednies coincidents.<\/li>\n<li><code>-q<\/code> sense sortida est\u00e0ndard, surt immediatament si es troba una coincid\u00e8ncia, \u00fatil en <em>scripts<\/em>.<\/li>\n<li><code>-s<\/code> suprimeix els missatges d\u2019error, \u00fatil en <em>scripts<\/em>.<\/li>\n<li><code>-r<\/code> busca tots els arxius a les carpetes d\u2019entrada especificades (per defecte els busca en el directori actual).<\/li>\n<li><code>-R<\/code> com <code>-r<\/code>, per\u00f2 tamb\u00e9 segueix els enlla\u00e7os simb\u00f2lics.<\/li>\n<li><code>--color=auto<\/code> ressalta les porcions coincidents, els noms d\u2019arxiu, els n\u00fameros de l\u00ednia, etc. usant colors.<\/li>\n<\/ul>\n<h2>Recerca literal<\/h2>\n<p>Els seg\u00fcents exemples tamb\u00e9 serien adequats amb l\u2019opci\u00f3 <code>-F<\/code> ja que no utilitzen expressions regulars. L\u2019ordre <code>grep<\/code> est\u00e0 prou ben dissenyada com per fer el que \u00e9s correcte en aquests casos.<\/p>\n<p># Imprimeix l\u00ednies que continguin l\u2019<code>string \u2019an\u2019<\/code>. L\u2019opci\u00f3 \\n genera una nova l\u00ednia<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ printf 'poma\\nplatan\\nmango\\nfigura\\ntango\\n' | grep 'an'<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">platan\r\n\r\nmango\r\n\r\ntango<\/pre>\n<p># Imprimeix coincid\u00e8ncies sense distinci\u00f3 entre maj\u00fascules i min\u00fascules<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ printf 'mussol\\nsargantana\\muSsoLina\\ntres mussols\\n' | grep -i 'mussol'<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">Mussol\r\n\r\nmuSsoLina\r\n\r\ntres mussols<\/pre>\n<p># Imprimeix coincid\u00e8ncies de paraules completes<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ printf 'parell basic\\nparitat\\n3-parell' | grep -w 'parell'<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">parell basic\r\n\r\n3-parell<\/pre>\n<p># Imprimeix coincid\u00e8ncies de l\u00ednies buides i les compta<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ printf 'cel\\n\\nterra\\n\\n\\n\\ninfern\\n' | grep -cx ''<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">4<\/pre>\n<p># Imprimeix coincid\u00e8ncies en una l\u00ednia i les seg\u00fcents dues l\u00ednies (A, after)<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ printf 'xarxa\\ncactus\\nsuculenta\\npetunia\\nesqueix' | 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>Expressions regulars<\/h2>\n<p>De forma predeterminada, <em>grep<\/em> tracta el patr\u00f3 de recerca com una expressi\u00f3 regular b\u00e0sica (en angl\u00e8s, <em>Basic Regular Expression<\/em>: BRE).<\/p>\n<ul>\n<li><code>-G<\/code> es pot utilitzar per especificar expl\u00edcitament que es necessita BRE.<\/li>\n<li><code>-E<\/code> habilitar\u00e0 expressions regulares esteses (en angl\u00e8s, <em>Extended Regular Expression<\/em>: ERO). <strong>A GNU <em>grep<\/em>, BRE i ERO nom\u00e9s difereixen en com s\u2019especifiquen els metacar\u00e0cters<\/strong><strong>;<\/strong><strong> no hi ha difer\u00e8ncia en les caracter\u00edstiques<\/strong><strong>. <\/strong><\/li>\n<li><code>-F<\/code> far\u00e0 que els patrons de recerca es tractin literalment.<\/li>\n<li><code>-P<\/code> habilitar\u00e0 expressions regulares compatibles amb Perl, si est\u00e0 disponible (PCRE, per les seves sigles en angl\u00e8s).<\/li>\n<\/ul>\n<p>Les seg\u00fcents l\u00ednies s\u00f3n les refer\u00e8ncies quan es volen utilitzar expressions regulars esteses. N\u2019hi ha de diverses classes:<\/p>\n<p><strong>\u00c0ncores<\/strong><\/p>\n<ul>\n<li>^ restringeix la coincid\u00e8ncia a l\u2019inici de la cadena.<\/li>\n<li>$ restringeix la coincid\u00e8ncia al final de la cadena.<\/li>\n<li>&lt; restringeix la coincid\u00e8ncia a l\u2019inici de paraula.<\/li>\n<li>&gt; restringeix la coincid\u00e8ncia al final de paraula.<\/li>\n<li>\\b restringeix la coincid\u00e8ncia a l\u2019inici\/final de paraules.<\/li>\n<li>\\B coincideix on \\b no coincideix.<\/li>\n<\/ul>\n<p><strong>Metacar\u00e0cters i quantificadors<\/strong><\/p>\n<ul>\n<li>. coincideix amb qualsevol car\u00e0cter, incloent-hi el car\u00e0cter de nova l\u00ednia.<\/li>\n<li>\u00bf coincideix 0 o 1 vegada.<\/li>\n<li>* coincideix 0 o m\u00e9s vegades.<\/li>\n<li>+ coincideix 1 o m\u00e9s vegades.<\/li>\n<li>{m,n} coincideix de <em>m<\/em> a <em>n<\/em><\/li>\n<li>{m,} coincideix almenys <em>m<\/em><\/li>\n<li>{,n} coincideix fins <em>a n<\/em> (incloent-hi 0 vegades).<\/li>\n<li>{n} coincideix exactament <em>n<\/em><\/li>\n<\/ul>\n<p><strong>Classes de car\u00e0cters<\/strong><\/p>\n<ul>\n<li>[set123] coincideix amb qualsevol d\u2019aquests car\u00e0cters una vegada.<\/li>\n<li>[^set123] coincideix, excepte amb qualsevol d\u2019aquests car\u00e0cters, una vegada.<\/li>\n<li>[3-7AM-X] rang de car\u00e0cters des de 3 fins a 7, <em>A<\/em>, un altre rang des de <em>M<\/em> fins a <em>X<\/em>.<\/li>\n<li>\\w similar a [a-zA-Z0-9_] per coincidir amb car\u00e0cters de paraules.<\/li>\n<li>\\s similar a [ \\t\\n\\r\\f\\v] per coincidir amb car\u00e0cters d\u2019espai en blanc.<\/li>\n<li>\\W coincideix amb car\u00e0cters que no s\u00f3n de paraules.<\/li>\n<li>\\S coincideix amb car\u00e0cters que no s\u00f3n d\u2019espai en blanc.<\/li>\n<li>[[:d igit:]] similar a [0-9] [[:alnum:]_] similar a \\w<\/li>\n<\/ul>\n<p>Es recomana veure el manual de l\u2019ordre <code>grep<\/code> per ser conscient de la versatilitat d\u2019aquesta ordre.<\/p>\n<p><strong>Alternan\u00e7a i agrupaci\u00f3<\/strong><\/p>\n<ul>\n<li>Pat1|pat2|pat3 coincideix amb <em>pat1<\/em> o <em>pat2<\/em> o <em>pat3<\/em>.<\/li>\n<li>() agrupa patrons, a(b|c)d \u00e9s el mateix que abd|acd. Tamb\u00e9 serveix com a grup de captura.<\/li>\n<li>\\N refer\u00e8ncia cap enrere, proporciona la porci\u00f3 coincident de l\u2019N-\u00e8 grup de captura.<\/li>\n<li>\\1 refer\u00e8ncia cap enrere al primer grup de captura.<\/li>\n<li>\\2 refer\u00e8ncia cap enrere al segon grup de captura i aix\u00ed successivament fins a \\9.<\/li>\n<\/ul>\n<p>En el manual de <code>grep<\/code> se citen les difer\u00e8ncies entre BRE i ERE. En les expressions regulars b\u00e0siques els metacar\u00e0cters ?, +, {, |, (i) perden el seu significat especial; en el seu lloc, s\u2019utilitzen les versions amb barra invertida \\?,\\ +, \\{,\\ |, \\( <em>i \\)<\/em>.<\/p>\n<p># Imprimeix la coincid\u00e8ncia quan el final de la l\u00ednia acaba amb &#8211;<em>ar<\/em><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ printf 'pedalejar\\ncorrer\\nescriure\\namar' | grep 'ar$'<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">pedalejar\r\n\r\namar<\/pre>\n<p># Imprimeix les paraules que comencin amb<code>'par'<\/code>, acaben en <code>'t'<\/code>, i poden tenir <code>'en'<\/code> o <code>'ro'<\/code> al mig, sense importar si estan en maj\u00fascules o min\u00fascules.<\/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># Imprimeix coincid\u00e8ncia quan hi ha text acotat<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"mowtwo\">$ echo 'Disfruto practicant exercicis de \"bash\" i \"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\u00ednies de 8 car\u00e0cters que tenen les mateixes 3 lletres min\u00fascules al principi i 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>A la Wikipedia pots llegir que grep \u00e9s una utilitat de l\u00ednia d\u2019ordre per buscar conjunts de dades de text pla a la recerca de l\u00ednies que coincideixin amb una expressi\u00f3 regular. El seu nom prov\u00e9 de l\u2019ordre ed g\/re\/p (globally search a regular expression and print, en catal\u00e0 recerca global d\u2019una expressi\u00f3 regular i [&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\/wp-json\/wp\/v2\/pages\/689"}],"collection":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/wp-json\/wp\/v2\/comments?post=689"}],"version-history":[{"count":12,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/wp-json\/wp\/v2\/pages\/689\/revisions"}],"predecessor-version":[{"id":1248,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/wp-json\/wp\/v2\/pages\/689\/revisions\/1248"}],"wp:attachment":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/introduccion-a-los-entornos-de-trabajo-gnu-linux\/wp-json\/wp\/v2\/media?parent=689"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}