Sed commando of Stream Editor is een zeer krachtig hulpprogramma dat wordt aangeboden door Linux/Unix systemen. Het wordt voornamelijk gebruikt voor tekstvervanging, vinden & vervangen, maar het kan ook andere tekstmanipulaties uitvoeren zoals invoegen, verwijderen, zoeken enz. Met SED kunnen we complete bestanden bewerken zonder ze daadwerkelijk te hoeven openen. Sed ondersteunt ook het gebruik van reguliere expressies, wat sed een nog krachtiger test manipulatie tool maakt.
In dit artikel zullen we leren om het sed commando te gebruiken met behulp van enkele voorbeelden. De basissyntaxis voor het gebruik van sed is,
sed OPTIONS…
Nu gaan we enkele voorbeelden bekijken.
Voorbeeld :1) Gedeeltelijke tekst van een bestand weergeven
Met sed kunnen we slechts een deel van een bestand bekijken, in plaats van het hele bestand te zien. Om enkele regels van het bestand te zien, gebruikt u het volgende commando,
$ sed -n 22,29p testfile.txt
hier, optie ‘n’ onderdrukt het afdrukken van het hele bestand & optie ‘p’ zal alleen de regels van 22 tot 29 afdrukken.
Exemplaar :2) Alles weergeven behalve enkele regels
Om de gehele inhoud van een bestand weer te geven behalve een bepaald gedeelte, gebruikt u het volgende commando,
$ sed 22,29d testfile.txt
Optie ‘d’ verwijdert de genoemde regels uit de uitvoer.
Exemplaar :3) Elke 3e regel vanaf de N-de regel weergeven
Om de inhoud van elke 3e regel vanaf regelnummer 2 of een andere regel weer te geven, gebruikt u het volgende commando
$ sed -n '2~3p' file.txt
Exemplaar :4 ) Een regel verwijderen met het commando sed
Om een regel met sed uit een bestand te verwijderen, gebruikt u het volgende commando,
$ sed Nd testfile.txt
waarbij ‘N’ het regelnummer is & optie ‘d’ zal het genoemde regelnummer verwijderen. Om de laatste regel van het bestand te verwijderen, gebruikt u
$ sed $d testfile.txt
Voorbeeld :5) Een reeks regels verwijderen
Om een reeks regels uit het bestand te verwijderen, gebruikt u
$ sed '29,34d' testfile.txt
Dit verwijdert de regels 29 tot 34 van testfile.txt bestand.
Exemplaar :6) Andere dan de genoemde regels verwijderen
Om andere dan de genoemde regels uit een bestand te verwijderen, gebruiken we ‘!’
$ sed '29,34!d' testfile.txt
hier wordt de ‘!’ optie gebruikt als niet, dus het zal de voorwaarde omkeren, d.w.z. het zal de genoemde regels niet verwijderen. Alle andere regels dan 29-34 zullen worden verwijderd uit de bestanden testfile.txt.
Exemplaar :7) Toevoegen van lege regels/spaties
Om een lege regel toe te voegen na elke niet-blanke regel, gebruiken we optie ‘G’,
$ sed G testfile.txt
Exemplaar :8) Zoeken en vervangen van een string met sed
Om & een string uit het bestand te zoeken en te vervangen, gebruiken we het volgende voorbeeld,
$ sed 's/danger/safety/' testfile.txt
hier zal optie ‘s’ zoeken naar het woord ‘gevaar’ & vervang het door ‘veiligheid’ op elke regel alleen voor het eerste voorkomen.
Voorbeeld :9) Een string in een heel bestand zoeken en vervangen met sed
Om het woord volledig uit het bestand te vervangen, gebruiken we optie ‘g’ met ‘s’,
$ sed 's/danger/safety/g' testfile.txt
Voorbeeld :10) Vervang het n-de voorkomen van string patroon
We kunnen ook een string vervangen op het n-de voorkomen van een bestand. Zoals ‘gevaar’ vervangen door ‘veiligheid’ alleen op het tweede voorkomen,
$ sed ‘s/danger/safety/2’ testfile.txt
Om ‘gevaar’ te vervangen op het tweede voorkomen van elke regel van het hele bestand, gebruik
$ sed 's/danger/safety/2g' testfile.txt
Voorbeeld :11) Een tekenreeks op een bepaalde regel vervangen
Om een tekenreeks alleen van een bepaalde regel te vervangen, gebruikt u
$ sed '4 s/danger/safety/' testfile.txt
Dit zal alleen de tekenreeks van de 4e regel van het bestand vervangen. We kunnen ook een bereik van regels vermelden in plaats van een enkele regel,
$ sed '4,9 s/danger/safety/' testfile.txt
Voorbeeld :12) Voeg een regel toe na/voor de gematchte zoekopdracht
Om een nieuwe regel met enige inhoud toe te voegen na elke patroonmatch, gebruik optie ‘a’,
$ sed '/danger/a "This is new line with text after match"' testfile.txt
Om een nieuwe regel toe te voegen met enige inhoud a vóór elke patroonmatch, gebruik optie ‘i’,
$ sed '/danger/i "This is new line with text before match" ' testfile.txt
Exemplaar :13) Verander een hele regel met overeenkomend patroon
Om een hele regel te veranderen in een nieuwe regel wanneer een zoekpatroon overeenkomt, moeten we optie ‘c’ gebruiken met sed,
$ sed '/danger/c "This will be the new line" ' testfile.txt
Dus wanneer het patroon overeenkomt met ‘gevaar’, zal de hele regel worden veranderd in de genoemde regel.
Gevorderde opties met sed
Tot nu toe hebben we alleen eenvoudige expressies met sed gebruikt, nu zullen we enkele geavanceerde toepassingen van sed met regex bespreken,
Voorbeeld :14) Het uitvoeren van meerdere sed commando’s
Als we meerdere sed expressies moeten uitvoeren, kunnen we optie ‘e’ gebruiken om de sed commando’s aan elkaar te rijgen,
$ sed -e 's/danger/safety/g' -e 's/hate/love/' testfile.txt
Exemplaar :15) Een reservekopie maken voordat we een bestand bewerken
Om een reservekopie van een bestand te maken voordat we het bewerken, gebruiken we optie ‘-i.bak’,
$ sed -i.bak -e 's/danger/safety/g' testfile.txt
Dit maakt een reservekopie van het bestand met extensie .bak. U kunt ook een andere extensie gebruiken als u dat wilt.
Voorbeeld :16) Verwijder een bestandsregel beginnend met & eindigend met een patroon
Om een regel te verwijderen beginnend met een bepaalde string & eindigend met een andere string, gebruikt u
$ sed -e 's/^danger.*stops$//g' testfile.txt
Dit verwijdert de regel met ‘gevaar’ aan het begin & ‘stopt’ aan het eind & er kan een willekeurig aantal woorden tussen staan , ‘.*’ definieert dat deel.
Voorbeeld :17) Regels toevoegen
Om voor elke regel wat inhoud toe te voegen met sed & regex, gebruik
$ sed -e 's/.*/testing sed &/' testfile.txt
Zo zal nu voor elke regel ‘testing sed’ staan.
Exemplaar :18) Verwijderen van alle becommentarieerde regels & lege regels
Om alle becommentarieerde regels te verwijderen, d.w.z. regels met # & alle lege regels, gebruik
$ sed -e 's/#.*//;/^$/d' testfile.txt
Om alleen becommentarieerde regels te verwijderen, gebruik
$ sed -e 's/#.*//' testfile.txt
Exemplaar :19) Verkrijg lijst van alle gebruikersnamen uit /etc/passwd
Om de lijst van alle gebruikersnamen uit /etc/passwd bestand te verkrijgen, gebruikt u
$ sed 's/\(*\).*/\1/' /etc/passwd
een volledige lijst van alle gebruikersnamen zal op het scherm als uitvoer worden gegenereerd.
Voorbeeld :20) Voorkom overschrijven van systeem links met sed commando
‘sed -i’ commando staat er om bekend dat het systeem links verwijdert & creëert alleen normale bestanden in plaats van het link bestand. Dus om zo’n situatie te voorkomen & voorkom dat ‘sed -i’ de links vernietigd, gebruik ‘-follow-symklinks’ opties bij het commando dat wordt uitgevoerd.
Laten we aannemen dat ik SELinux wil uitschakelen op CentOS of RHEL Severs
# sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux