Com substituir diverses línies mitjançant l'ordre `sed`

How Replace Multiple Lines Using Sed Command



De vegades requereix substituir diverses línies d'un fitxer per un caràcter o text concret. Existeixen diferents ordres a Linux per substituir diverses línies d'un fitxer. L'ordre `sed` és un d'ells per fer aquest tipus de tasques. La forma completa de 'sed' és Steam Editor, i s'utilitza principalment per llegir i convertir el text de diferents maneres mitjançant una expressió regular. En aquest tutorial s’explica com es pot utilitzar aquesta ordre per substituir les diverses línies d’un fitxer de maneres diferents.

Full de trucs 'sed' d'ús habitual:

Els caràcters més utilitzats que s’utilitzen a l’ordre `sed` s’expliquen a la taula següent.







Personatge Propòsit
a S'utilitza per afegir contingut.
b S'utilitza per ramificar contingut.
c S'utilitza per canviar contingut.
d S'utilitza per eliminar una línia d'un fitxer.
D S'utilitza per eliminar la primera línia d'un fitxer.
g Solia copiar del text de la retenció.
G S'utilitza per afegir des del text de la retenció.
h S'utilitza per copiar al text de la retenció.
H S'utilitza per afegir al text de la retenció.
jo S'utilitza per a la inserció.
Jo S'utilitza per imprimir la línia substitutiva.
n S'utilitza per anar a la següent línia.
N S'utilitza per afegir la següent línia d'entrada.
pàg S’utilitza per imprimir.
Pàg S'utilitza per imprimir la primera línia.
q S'utilitza per deixar de fumar.
Q S'utilitza per deixar immediatament.
r S'utilitza per llegir el fitxer.
R S'utilitza per llegir la línia del fitxer.
s S'utilitza per substituir.
t S'utilitza per provar la substitució.
T S'utilitza per provar cap substitució.
dins S'utilitza per escriure al fitxer.
IN S'utilitza per escriure una línia al fitxer.
x S’utilitza per canviar patrons i mantenir premuts.
i S'utilitza per traduir.
Amb S'utilitza per esborrar la línia.
'=' S'utilitza per imprimir el número de línia.

Substitueix diverses línies mitjançant l'ordre `sed` del terminal:

En aquesta part d’aquest tutorial es mostra com es pot utilitzar l’ordre `sed` per substituir les línies múltiples d’un fitxer del terminal. Creeu un fitxer anomenat sed.txt amb el contingut següent, proveu les ordres d'aquesta part.



sed.txt



La forma completa de sed és editor de flux.





És una utilitat Unix que s’utilitza per llegir i convertir el text en un format diferent.

Va ser desenvolupat per Lee E. McMahon.



S'utilitza per al processament de text.

Admet expressions regulars.

Exemple-1: substituïu dues línies consecutives

La següent ordre `sed` substituirà dues línies consecutives per una altra línia. Aquí, l'opció -z s'utilitza per substituir les línies consecutives per dades nul·les abans d'afegir el text de reemplaçament. Segons l'ordre, el 3rdi 4thles línies del fitxer se substituiran pel text, 'És una eina molt útil' .

$gatsed.txt
$sed -Amb 's / Va ser desenvolupat per Lee E. McMahon. nS'utilitza per al text
processament. / És una eina molt útil.
sed.txt

La sortida següent apareixerà després d'executar les ordres.

Exemple-2: substituïu diverses línies segons la coincidència i el senyal global

L'ordre següent 'sed' substituirà totes les línies que comencin per la paraula, 'És' amb la paraula ' Aquesta línia es substitueix '.

$gatsed.txt
$sed 's / ^ It. * / Aquesta línia es substitueix / g'sed.txt

La sortida següent apareixerà després d'executar les ordres. Tres línies contenen la paraula ' Això ‘A l’expedient. Per tant, aquestes línies s’han substituït pel text de reemplaçament.

Exemple-3: substituïu diverses línies en funció de l'ordre de coincidència i de la següent línia

L'ordre següent 'sed' substituirà la paraula ' és 'Per la paraula,' era 'Amb l'ordre de línia següent,' n '.

$gatsed.txt
$sed '{n; / is / {s / is / was /}}'sed.txt

La sortida següent apareixerà després d'executar les ordres. Aquí, 'és' existeix a la 2ndi 4thlínies del fitxer, i aquestes línies són modificades per la paraula 'Era' .

Substituïu diverses línies creant el fitxer d'escriptura `sed`:

En els exemples anteriors, les ordres `sed` s’han executat des del terminal. Però és un llenguatge de seqüència d’ordres i, si l’escriptura conté múltiples sentències, és millor crear un fitxer sed amb l’escriptura. Creeu un fitxer de text anomenat alumnes.txt amb el contingut següent en què s'aplicarà l'script `sed`.

alumnes.txt

ID: 111045
Nom: Robert
Departament: CSE
Lot: 35

ID: 111876
Nom: Josep
Departament: BBA
Lot: 27

ID: 111346
Nom: William
Departament: CSE
Lot: 45

ID: 111654
Nom: Charles
Departament: EEE
Lot: 41

ID: 111346
Nom: Joan
Departament: CSE
Lot: 25

ID: 111746
Nom: Thomas
Departament: CSE
Lot: 15

Exemple-4: substituïu diverses línies d'un fitxer mitjançant el fitxer d'escriptura `sed`

Creeu un fitxer sed anomenat a substituir.sed amb el contingut següent per substituir les diverses línies basades en el patró de cerca. Aquí, la paraula ' CSE ‘Es buscarà al fitxer de text i, si existeix la coincidència, tornarà a buscar els números 35 i 15. Si la segona coincidència existeix al fitxer, se substituirà pel número 45.

substituir.sed

/CSE/ {
p; n;
/35/ {
s/35/45/;
p; d;
}
/15/ {
s/15/55/;
p; d;
}
}
p;

Executeu l'ordre següent per comprovar el contingut existent del fitxer. 'CSE' va aparèixer quatre vegades al fitxer de text. 35 i 15 existeixen en dos llocs.

$gatalumnes.txt

L'ordre següent substituirà el contingut de les diverses línies basades en l'script sed.

$sed -n -freplace.sed students.txt

La següent sortida apareixerà després d'executar l'ordre.

Conclusió

En aquest tutorial s'han mostrat diferents maneres de substituir diverses línies o el contingut de diverses línies mitjançant l'ordre `sed`. En aquest tutorial també es mostra com es pot executar l’escriptura `sed` des d’un fitxer sed. Espero que aquest tutorial ajudi el lector a substituir diverses línies de qualsevol fitxer mitjançant l'ordre `sed`.