<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>maduixa &#187; sed</title>
	<atom:link href="http://blog.jau.cat/tag/sed/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.jau.cat</link>
	<description>Blog personal d&#039;en minterior amb gust a maduixa</description>
	<lastBuildDate>Mon, 21 Jun 2010 22:23:17 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Substituir text en múltiples fitxers amb sed</title>
		<link>http://blog.jau.cat/2010/03/17/substituir-text-en-multiples-fitxers-amb-sed/</link>
		<comments>http://blog.jau.cat/2010/03/17/substituir-text-en-multiples-fitxers-amb-sed/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 13:54:46 +0000</pubDate>
		<dc:creator>minterior</dc:creator>
				<category><![CDATA[Programari]]></category>
		<category><![CDATA[com es fa]]></category>
		<category><![CDATA[find]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[sed]]></category>

		<guid isPermaLink="false">http://blog.jau.cat/?p=286</guid>
		<description><![CDATA[Si volem substituir una cadena de caràcters per una altra en un fitxer o en múltiples fitxers simultàniament i de forma recursiva1 ho podem fer amb aquesta comanda:
find -type f -exec sed -i 's/CADENA A SUBSTITUIR/CADENA NOVA/g' {} \;
On ﻿CADENA A SUBSTITUIR és una expressió regular. Això vol dir que hem d&#8217;escapar els caràcters amb connotacions [...]]]></description>
			<content:encoded><![CDATA[<p>Si volem substituir una <a title="Cadena de caràcters a la Viquipèdia" href="http://ca.wikipedia.org/wiki/String_(estructura_de_dades)">cadena de caràcters</a> per una altra en un fitxer o en múltiples fitxers simultàniament i de forma recursiva<sup><a title="nota 1" href="#nota1">1</a></sup> ho podem fer amb aquesta comanda:</p>
<pre class="brush: bash;">find -type f -exec sed -i 's/CADENA A SUBSTITUIR/CADENA NOVA/g' {} \;</pre>
<p>On ﻿<span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;">CADENA A SUBSTITUIR</span> és una <strong><a title="Expressió regular a la Viquipèdia" href="http://ca.wikipedia.org/wiki/Expressió_regular">expressió regular</a></strong>. Això vol dir que hem d&#8217;<em><a title="Escape character a la Wikipedia (en anglès)" href="http://en.wikipedia.org/wiki/Escape_character">escapar</a></em> els caràcters amb connotacions especials amb una barra invertida \, com . + * [ ] etcètera.</p>
<p>També cal tenir en compte que això substituirà <strong>totes les aparicions</strong> de la cadena a substituir que es trobin per <strong>tots els fitxers</strong>. Si volem que només s&#8217;apliqui a certs fitxers, podem utilitzar el paràmetre <em>-name</em> de <a href="http://blog.jau.cat/2010/03/01/cerca-amb-la-comanda-find-de-gnulinux/">la comanda find</a>.</p>
<p>Si combinem el que he dit als dos paràgrafs anteriors, per exemple la comanda:</p>
<pre class="brush: bash;">find -type f -name aliments* -exec sed -i 's/pebrot (vermell)/maduixa vermella/g' {} \;</pre>
<p>cercarà només en fitxers els noms dels quals comencin per aliments,  i substituirà <em>pebrot (vermell)</em> per <em>maduixa vermella</em>.</p>
<p>Ho podem complicar més, i aprofitar la paraula vermell de la cadena inicial i afegir-li la lletra a per fer-la femenina: vermella, tot amb expressions regulars:</p>
<pre class="brush: bash;">find -type f -name aliments* -exec sed -i 's/\(pebrot (\)\(vermell\))/maduixa \2a/g' {} \;</pre>
<p>Aquesta expressió crea dos grups: el primer conté &#8220;pebrot (&#8221; i el segon &#8220;vermell&#8221; (el darrer parèntesi queda fora de cap grup). Així podem usar la seqüència \2 per referir-nos al contingut del segon grup, al qual li afegim la lletra a per transformar-lo en &#8220;vermella&#8221;.</p>
<div style="margin-top: 25px;">
<p><sup><a name="nota1"></a>1</sup> Si volem fer-ho en un sol fitxer o en varis sense necessitar la recursivitat no cal usar <em>find</em>, podem usar <em>sed</em> directament:</p>
<pre class="brush: bash;">sed -i 's/CADENA A SUBSTITUIR/CADENA NOVA/g' fitxer1 *.txt</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.jau.cat/2010/03/17/substituir-text-en-multiples-fitxers-amb-sed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
