sed Ordre per substituir una cadena en un fitxer

Sed Command Replace String File



Sempre que treballem amb qualsevol tipus de fitxer, és una pràctica molt habitual fer modificacions a aquests fitxers cercant i substituint paraules. La majoria dels editors de text proporcionen diferents mètodes basats en la GUI per realitzar aquestes modificacions. Tanmateix, de vegades, necessiteu una manera de trobar i substituir les paraules d’un fitxer a través del terminal. Per tant, en aquest article, us guiarem pel mètode d’utilitzar l’ordre sed per substituir una cadena en un fitxer de text. També donarem llum sobre els diferents escenaris en què es pot utilitzar aquesta ordre.

Nota: Farem servir Linux Mint 20 per demostrar l'ús de l'ordre sed per substituir una cadena en un fitxer. També podeu utilitzar qualsevol altre sabor de Linux si ho desitgeu.







Ús de l'ordre sed:

Ara us mostrarem alguns exemples molt interessants per representar l’ús de l’ordre sed a Linux. Vegem com funciona aquesta ordre en diferents escenaris.



Creació d'un fitxer de text per demostrar:

Per demostrar l'ús de l'ordre sed, ens agradaria treballar amb un fitxer de text. Tanmateix, fins i tot podeu crear un fitxer Bash o qualsevol altre fitxer que vulgueu. En segon lloc, crearem el fitxer al directori Home de manera que no hàgim d’especificar cap ruta complexa mentre accedim a aquest fitxer. Per crear un fitxer de text, cal seguir els passos següents:



Feu clic a la icona del Gestor de fitxers que es troba a la barra de tasques de Linux Mint 20:





Ara creeu un fitxer de text nou al directori inicial fent clic amb el botó dret del ratolí a qualsevol lloc i després escollint l’opció Nou document del menú en cascada i l’opció Buida document del menú de sub cascada. Un cop creat el fitxer de text, doneu-li un nom adequat. Per a aquest exemple concret, l’he nomenat sed.txt.



Feu doble clic sobre aquest fitxer per obrir-lo i escriviu-hi qualsevol text aleatori tal com es mostra a la imatge següent. Deseu aquest fitxer de text prement Ctrl + S i després tanqueu-lo.

Ara inicieu el terminal a Linux Mint 20 tal com es mostra a la imatge següent:

Després d’iniciar el terminal a Linux Mint 20, podeu passar un per un tots els exemples esmentats a continuació.

Utilitzant l'ordre sed per substituir totes les ocurrències d'una paraula determinada:

Podeu utilitzar l'ordre sed per substituir totes les ocurrències d'una paraula determinada en un fitxer de text. A continuació s’esmenta la sintaxi per assolir aquest objectiu:

$sed‘S/sed/FindWord/ReplaceWord/’File.txt

Aquí, heu de substituir FindWord per la paraula que vulgueu substituir i ReplaceWord per la paraula que voleu substituir. A més, també heu de substituir el fitxer pel nom del fitxer on vulgueu fer aquestes substitucions. En aquest escenari, he substituït FindWord per sed i ReplaceWord per replace. El nostre nom de fitxer era sed.txt. També es mostra a la imatge següent:

L'execució correcta d'aquesta ordre us mostrarà els canvis que s'han produït a causa de l'execució d'aquesta ordre al vostre terminal:

Utilitzant l'ordre sed per substituir la novena aparició d'una paraula donada en cada línia:

L'escenari anterior era l'escenari de reemplaçament més senzill, però, de vegades, no voleu substituir totes les aparicions d'una paraula, sinó que només voleu substituir la primera, segona o enèsima aparició d'aquesta paraula en totes les línies. Per fer-ho, podeu executar l'ordre següent:

$sed‘S/FindWord/ReplaceWord/num ’file.txt

Aquí, heu de substituir FindWord per la paraula que vulgueu substituir i ReplaceWord per la paraula que voleu substituir. A més, també heu de substituir el fitxer pel nom del fitxer on vulgueu fer aquestes substitucions. En aquest escenari, he substituït FindWord substituir i ReplaceWord per sed. El nostre nom de fitxer era sed.txt. A més, num fa referència a l’ocurrència o la posició de la paraula a substituir. A l'exemple demostrat, vull substituir la primera ocurrència de substituir per sed a cada línia, tal com es mostra a la imatge següent:

L'execució correcta d'aquesta ordre us mostrarà els canvis que s'han produït a causa de l'execució d'aquesta ordre al vostre terminal:

Utilitzant l'ordre sed per substituir una determinada paraula en una línia específica:

De vegades, només voleu substituir una paraula determinada en una línia específica i no en tot el document. Per fer-ho, heu d’especificar explícitament aquest número de línia concret a l’ordre següent:

$sed«LineNum s/FindWord/ReplaceWord/’File.txt

Aquí, heu de substituir FindWord per la paraula que vulgueu substituir i ReplaceWord per la paraula que voleu substituir. A més, també heu de substituir el fitxer pel nom del fitxer on vulgueu fer aquestes substitucions. En aquest escenari, he substituït FindWord sed i ReplaceWord per substituir. El nostre nom de fitxer era sed.txt. A més, haureu de substituir LineNum pel número de línia de la línia en particular en què voleu fer la substitució. En aquest exemple, volíem substituir sed per substituir a la línia número 2 del nostre fitxer, tal com es mostra a la imatge següent:

L'execució correcta d'aquesta ordre us mostrarà els canvis que s'han produït a causa de l'execució d'aquesta ordre al vostre terminal. Podeu verificar fàcilment que els canvis esmentats només s’han produït a la línia número 2 del nostre fitxer i no a tot el text.

Conclusió:

Sempre que sentiu la necessitat de substituir qualsevol paraula d’un fitxer, el primer que heu de fer és identificar el vostre requisit particular, és a dir, si voleu substituir aquesta paraula específica a tot el fitxer o si voleu substituir una ocurrència específica de aquesta paraula en concret, o bé voleu substituir aquesta paraula en una línia específica. Un cop hàgiu identificat el vostre escenari concret, podeu utilitzar aquest mètode específic a partir dels exemples que es comenten en aquest article.