{"id":344,"date":"2020-08-17T13:18:58","date_gmt":"2020-08-17T16:18:58","guid":{"rendered":"http:\/\/xaxowareti.com.br\/?p=344"},"modified":"2020-08-17T13:19:02","modified_gmt":"2020-08-17T16:19:02","slug":"recursivamente-procurar-e-substituir-uma-palavra-em-varios-arquivos","status":"publish","type":"post","link":"https:\/\/xaxowareti.com.br\/?p=344","title":{"rendered":"Recursivamente procurar e substituir uma palavra em v\u00e1rios arquivos"},"content":{"rendered":"\n<p>O sistema operacional Linux oferece v\u00e1rias ferramentas para gerenciamento e edi\u00e7\u00e3o de arquivos, neste artigo mostram como usar alguns comandos para substituir uma ou mais palavras em um arquivo de texto. Um comando bastante \u00fatil quando voc\u00ea precisa substituir uma ou mais palavras em alguns arquivos \u00e9 este:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sed -i 's\/<em>parola1<\/em>\/<em>parola2<\/em>\/g' *.txt<\/pre>\n\n\n\n<p>desta forma ser\u00e1 substitu\u00eddo por&nbsp;<em>word1 word2<\/em>em todos os arquivos de texto no diret\u00f3rio atual.<\/p>\n\n\n\n<p>Mas se tiv\u00e9ssemos que fazer isso tamb\u00e9m substituir os arquivos em algumas pastas, ent\u00e3o sob o comando torna-se:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">find .\/ -type f -exec sed -i 's\/parola1\/parola2\/g' '{}' \\;<\/pre>\n\n\n\n<p>neste caso, eu fiz sem o filtro do tipo de arquivo&nbsp;.txt&nbsp;e depois ser\u00e3o levados em conta todos os arquivos no diret\u00f3rio atual e seus subdiret\u00f3rios.<\/p>\n\n\n\n<p>Com o&nbsp;comando&nbsp;find que foi utilizado o&nbsp;\u201c-exec\u201d&nbsp;que permite executar um comando de cada vez que um arquivo \u00e9 encontrado, que respeite as regras estabelecidas para a pesquisa. No caso anterior, a pesquisa inclui todos os elementos de \u201cfile\u201d tipo e excluir os diret\u00f3rios.<br>Tudo est\u00e1 coberto por&nbsp;\u201c-exec\u201d&nbsp;\u00e9 o comando a ser executado e seus par\u00e2metros, para o caractere&nbsp;\u201c;\u201d&nbsp;indicando o final da cadeia de comando.<br>Outro elemento-chave \u00e9 o s\u00edmbolo&nbsp;\u201c{}\u201cIndica que o nome real do arquivo e descobriu que, desta forma ser usado como um par\u00e2metro do comando que deseja executar. No comando anterior chaves\u201d&nbsp;{}&nbsp;\u201cforam listadas e no final de comando \u00e9 precedido de uma barra&nbsp;\u201c\\\u201d&nbsp;para proteger esses s\u00edmbolos de&nbsp;<em>\u2018expans\u00e3o<\/em>&nbsp;shell.<br>O comando \u00e9 executado no diret\u00f3rio de partida, ent\u00e3o se o comando digitado necessita de uma sa\u00edda deve ser levado em conta.<\/p>\n\n\n\n<p>Conselho a buscar em primeiro lugar a palavra, s\u00f3 para ver o que ser\u00e1 encontrado e substitu\u00eddo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">find .\/ -type f -exec grep -r \"parola1\" '{}' \\;<\/pre>\n\n\n\n<p>Ou voc\u00ea pode usar o comando:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">find .\/ -type f -print0 | xargs -0 grep \"parola1\"<\/pre>\n\n\n\n<p>desta forma ir\u00e1 exibir todas as linhas que cont\u00eam a string.<\/p>\n\n\n\n<p>Em particular, a directiva tem sido usado&nbsp;\u201c-print0\u201d&nbsp;que permite a sa\u00edda do nome completo terminada por um caractere nulo. Desta forma, o string produzida pode ser interpretado corretamente pelo programa a seguir.<br>Na verdade, a sa\u00edda do&nbsp;findest\u00e1 conectada com um tubo para&nbsp;xargs&nbsp;comando cujo par\u00e2metro&nbsp;\u201c-0\u201d&nbsp;indica que os nomes dos arquivos recebidos como um fim de entrada com um caractere nulo.<\/p>\n\n\n\n<p>O comando \u201cxargs\u201d \u00e9 respons\u00e1vel por receber os nomes dos arquivos e executar o comando \u201d&nbsp;grep&nbsp;\u201c, que por sua vez usa os par\u00e2metros passados \u200b\u200bpara&nbsp;xargs.<\/p>\n\n\n\n<p>Se voc\u00ea s\u00f3 quer ver exibido o nome do arquivo que a cont\u00e9m, o comando \u00e9:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">find .\/ -type f -print0 | xargs -0 grep -l \"parola1\"<\/pre>\n\n\n\n<p>O par\u00e2metro&nbsp;\u201c-l\u201d&nbsp;indica que temos como sa\u00edda uma lista de nomes de arquivos, mas n\u00e3o as linhas, foram encontrados nos jogos.<\/p>\n\n\n\n<p>Fa\u00e7o notar que em todos os comandos listados tem sido sugerido que a pesquisa para acontecer no diret\u00f3rio atual e todos os seus sub-diret\u00f3rios, mas se quisermos olhar para qualquer diret\u00f3rio que voc\u00ea deve inserir o caminho (relativo ou absoluto):<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">find \/home\/user\/ -type f | xargs grep -l \"parola1\"<\/pre>\n\n\n\n<p>Finalmente, se n\u00e3o fosse necess\u00e1rio o uso de par\u00e2metros complexos para a busca de arquivos e deseja apenas pesquisa recursivamente uma palavra ou frase dentro dos arquivos em subdiret\u00f3rios m\u00faltiplas, muito mais simples basta usar o comando&nbsp;grep&nbsp;com o&nbsp;\u201c-r&nbsp;\u201d<\/p>\n\n\n\n<p>grep \u201cthis text\u201d *.php&nbsp;-rDesta forma ele vai olhar para a string&nbsp;<em>\u201ceste texto\u201d<\/em>&nbsp;em todos os&nbsp;arquivos. \u201cPhp\u201d&nbsp;no diret\u00f3rio atual e todos os seus subdiret\u00f3rios.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O sistema operacional Linux oferece v\u00e1rias ferramentas para gerenciamento e edi\u00e7\u00e3o de arquivos, neste artigo mostram como usar alguns comandos para substituir uma ou mais palavras em um arquivo de texto. Um comando bastante \u00fatil quando voc\u00ea precisa substituir uma ou mais palavras em alguns arquivos \u00e9 este: sed -i &#8216;s\/parola1\/parola2\/g&#8217; *.txt desta forma ser\u00e1 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-344","post","type-post","status-publish","format-standard","hentry","category-sem-categoria"],"_links":{"self":[{"href":"https:\/\/xaxowareti.com.br\/index.php?rest_route=\/wp\/v2\/posts\/344","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/xaxowareti.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/xaxowareti.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/xaxowareti.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/xaxowareti.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=344"}],"version-history":[{"count":1,"href":"https:\/\/xaxowareti.com.br\/index.php?rest_route=\/wp\/v2\/posts\/344\/revisions"}],"predecessor-version":[{"id":345,"href":"https:\/\/xaxowareti.com.br\/index.php?rest_route=\/wp\/v2\/posts\/344\/revisions\/345"}],"wp:attachment":[{"href":"https:\/\/xaxowareti.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=344"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/xaxowareti.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=344"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/xaxowareti.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=344"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}