{"id":59,"date":"2014-03-02T14:00:30","date_gmt":"2014-03-02T14:00:30","guid":{"rendered":"http:\/\/www.vcrini.com\/impressioni\/?p=59"},"modified":"2014-03-02T14:00:30","modified_gmt":"2014-03-02T14:00:30","slug":"ack-tutorial","status":"publish","type":"post","link":"https:\/\/www.vcrini.com\/impressioni\/?p=59","title":{"rendered":"Ack tutorial"},"content":{"rendered":"<p>Ack \u00e8 un&#8217;programma che serve per cercare del testo all&#8217;interno di file.<\/p>\n<p>La prima cosa che viene in mente \u00e8 che fa la stessa cosa di <strong>grep<\/strong>, ed infatti \u00e8 cos\u00ec, ma ack \u00e8 pi\u00f9 orientato allo sviluppatore ovvero fa quello che un programmatore si aspetterebbe.<\/p>\n<p>Se si usa ack in automatico si ha la colorazione dell&#8217;output, si evita di cercare nelle directory nascoste .svn, .git ed utilizza le espressioni regolari di perl senza bisogno di specificare parametri aggiuntivi (vedi il mio post su <a title=\"Grep\" href=\"http:\/\/www.vcrini.com\/impressioni\/?p=43\">grep<\/a>).<\/p>\n<p>Ma veniamo al tutoria su Ack<\/p>\n<ul>\n<li>installazioneci sono molti modi per installare ack e tutti ben spiegati sul <a href=\"http:\/\/beyondgrep.com\/install\/\">sito<\/a> originale.<br \/>\nsotto linux si pu\u00f2 procedere con<\/p>\n<pre>cpan App::Ack<\/pre>\n<p>oppure su una distribuzione ubuntu like installando il pacchetto <strong>ack-grep<\/strong> con<\/p>\n<pre>sudo apt-get install ack-grep<\/pre>\n<\/li>\n<li>esempiper trovare la sottostringa print in una cartella ricorsivamente\n<pre><strong>$&gt;ack print<\/strong><\/pre>\n<pre><span style=\"color: #0000ff;\">Capitolo10\/Bookmark.java<\/span>\r\n 45:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 exception.<span style=\"color: #ff0000;\">print<\/span>StackTrace();<\/pre>\n<pre><span style=\"color: #0000ff;\">Capitolo10\/CustomWorld.java<\/span>\r\n 48:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 exception.<span style=\"color: #ff0000;\">print<\/span>StackTrace();<\/pre>\n<pre><span style=\"color: #0000ff;\">Capitolo10\/ResourceTest.java<\/span>\r\n 75:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 exception.<span style=\"color: #ff0000;\">print<\/span>StackTrace();<\/pre>\n<pre><span style=\"color: #0000ff;\">Capitolo10\/SystemInfo.java<\/span>\r\n 19:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 exception.<span style=\"color: #ff0000;\">print<\/span>StackTrace();<\/pre>\n<pre><span style=\"color: #0000ff;\">Capitolo10\/WebStartCalculator.java<\/span>\r\n 101:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PrintStream <span style=\"color: #ff0000;\">print<\/span>Out = new PrintStream(out);<\/pre>\n<p>per trovare invece solo la parola print<\/p>\n<pre><strong>$&gt;ack -w print<\/strong><\/pre>\n<p>oppure<\/p>\n<pre><strong>$&gt;ack '\\bprint\\b'<\/strong> (usando la sintassi perl)<\/pre>\n<p>per trovare tutti i file java in un progetto<\/p>\n<pre><strong>ack -f --java<\/strong><\/pre>\n<p>(segue la lista di tutti i file java)<\/p>\n<p>inoltre mi sono tornate molto utili le opzioni <strong>-1<\/strong> e <strong>-m1<\/strong> che si fermano rispettivamente al primo match su tutto il progetto o su ogni singolo file, molto utile per cercare velocemente se un certo dato \u00e8 presente su un progetto.<\/li>\n<li>configurazione<\/li>\n<\/ul>\n<p>non c&#8217;\u00e8 bisogno di particolare configurazione ma se si \u00e8 soliti usare certe opzioni \u00e8 preferibile creare il file .ackrc e mettere dentro le opzioni preferite. Le mie sono:<\/p>\n<p>&#8211;ignore-dir=target (1)<br \/>\n&#8211;color (2)<br \/>\n&#8211;color-lineno=bright_black (2)<br \/>\n&#8211;color-filename=bright_blue (2)<br \/>\n&#8211;color-match=bright_red (2)<br \/>\n&#8211;sort-files (3)<br \/>\n&#8211;smart-case (4)<br \/>\n&#8211;follow (5)<br \/>\n&#8211;group (6)<br \/>\n&#8211;pager=LESS=FSRX less -r (7)<\/p>\n<p>E servono per:<\/p>\n<ol>\n<li>non cercare nelle sottocartelle che si chiamano target<\/li>\n<li>usare certi colori per nomi file, match e testo<\/li>\n<li>ordinare l&#8217;output di ack alfabeticamente<\/li>\n<li>usare lo smart case nella ricerca ovvero se ricerco un testo senza maiuscole ack fa una ricerca case insensitive altrimenti ricerca la stringa cos\u00ec com&#8217;\u00e8<\/li>\n<li>segue i link simbolici<\/li>\n<li>raggruppa per file i match<\/li>\n<li>usa less come pager se l&#8217;output \u00e8 pi\u00f9 grande di una pagina<\/li>\n<\/ol>\n<pre><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Ack \u00e8 un&#8217;programma che serve per cercare del testo all&#8217;interno di file. La prima cosa che viene in mente \u00e8 che fa la stessa cosa di grep, ed infatti \u00e8 cos\u00ec, ma ack \u00e8 pi\u00f9 orientato allo sviluppatore ovvero fa &hellip; <a href=\"https:\/\/www.vcrini.com\/impressioni\/?p=59\">Continua a leggere<span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false},"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/www.vcrini.com\/impressioni\/index.php?rest_route=\/wp\/v2\/posts\/59"}],"collection":[{"href":"https:\/\/www.vcrini.com\/impressioni\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.vcrini.com\/impressioni\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.vcrini.com\/impressioni\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.vcrini.com\/impressioni\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=59"}],"version-history":[{"count":4,"href":"https:\/\/www.vcrini.com\/impressioni\/index.php?rest_route=\/wp\/v2\/posts\/59\/revisions"}],"predecessor-version":[{"id":63,"href":"https:\/\/www.vcrini.com\/impressioni\/index.php?rest_route=\/wp\/v2\/posts\/59\/revisions\/63"}],"wp:attachment":[{"href":"https:\/\/www.vcrini.com\/impressioni\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=59"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.vcrini.com\/impressioni\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=59"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.vcrini.com\/impressioni\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=59"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}