Welkom bij het tweede deel van onze serie, een deel dat zich zal richten op sed, de GNU versie. Zoals je zult zien, zijn er verschillende varianten van sed, dat beschikbaar is voor nogal wat platformen, maar we zullen ons richten op GNU sed versies 4.x. Velen van jullie hebben al gehoord van sed en hebben het al gebruikt, voornamelijk als een substitutie-tool. Maar dat is slechts een deel van wat sed kan, en we zullen ons best doen om je zo veel mogelijk te laten zien van wat je ermee kunt doen. De naam staat voor Stream EDitor, en “stream” kan hier een bestand, een pipe of gewoon stdin zijn. We verwachten dat je basis Linux kennis hebt en als je al met reguliere expressies hebt gewerkt of op zijn minst weet wat een regexp is, des te beter. We hebben niet de ruimte voor een volledige tutorial over reguliere expressies, dus in plaats daarvan geven we u alleen een basisidee en veel sed voorbeelden. Er zijn veel documenten die over dit onderwerp gaan, en we zullen zelfs enkele aanbevelingen doen, zoals je over een minuut zult zien.
Installatie
Er valt hier niet veel te vertellen, omdat de kans groot is dat je sed al geïnstalleerd hebt, omdat het gebruikt wordt in verschillende systeem scripts en een onschatbaar gereedschap is in het leven van een Linux gebruiker die efficiënt wil zijn. Je kunt testen welke versie je hebt door
$ sed --version
Op mijn systeem vertelt dit commando me dat ik GNU sed 4.2.1 geïnstalleerd heb, plus links naar de home page en andere nuttige dingen. Het pakket heet gewoon ‘sed’ ongeacht de distributie, maar als Gentoo sed impliciet aanbiedt, betekent dat volgens mij dat je gerust kunt zijn.
Concepten
Voordat we verder gaan, vinden we het belangrijk om aan te geven wat het precies is dat sed doet, omdat “stream editor” misschien niet al te veel belletjes doet rinkelen. sed neemt de ingevoerde tekst, doet de gespecificeerde bewerkingen op elke regel (tenzij anders gespecificeerd) en drukt de gewijzigde tekst af. De gespecificeerde operaties kunnen append, insert, delete of substitute zijn. Dit is niet zo eenvoudig als het lijkt: wees gewaarschuwd dat er een heleboel opties en combinaties zijn die een sed commando nogal moeilijk te verteren kunnen maken. Dus als je sed wilt gebruiken, raden we je aan de basis van regexps te leren, en de rest kun je gaandeweg leren. Voordat we met de tutorial beginnen, willen we Eric Pement en anderen bedanken voor de inspiratie en voor wat hij heeft gedaan voor iedereen die sed wil leren en gebruiken.
Het UAF Geophysical Institute, is op zoek naar een ervaren Linux Systems Analyst om hun team van research cyber infrastructuur analisten en engineers te versterken. LOCATIE: Fairbanks, Alaska, USA
APPLY NOW
Reguliere uitdrukkingen
Aangezien sed commando’s/scripts de neiging hebben cryptisch te worden, vinden wij dat onze lezers de basisconcepten moeten begrijpen in plaats van blindelings commando’s te kopiëren en te plakken waarvan ze de betekenis niet kennen. Als je wilt begrijpen wat een regexp is, is het sleutelwoord “matching”. Of nog beter, “pattern matching”. Bijvoorbeeld, in een rapport voor uw HR afdeling schreef u de naam van Nick wanneer u verwees naar de netwerk architect. Maar Nick is verhuisd en John is in zijn plaats gekomen, dus nu moet je het woord Nick vervangen door John. Als het bestand report.txt heet, zou je kunnen doen
$ cat report.txt | sed 's/Nick/John/g' > report_new.txt
Bestandaard gebruikt sed stdout, dus misschien wil je de redirect operator van je shell gebruiken, zoals in ons voorbeeld hieronder. Dit is een heel eenvoudig voorbeeld, maar we hebben een paar punten geïllustreerd: we komen overeen met het patroon “Nick” en we vervangen alle instanties door “John”. Merk op dat sed hoofdlettergevoelig is, dus wees voorzichtig en controleer je uitvoerbestand om te zien of alle vervangingen zijn uitgevoerd. Het bovenstaande had ook als volgt geschreven kunnen worden:
$ sed 's/Nick/John/g' report.txt > report_new.txt
OK, maar waar zijn de reguliere expressies, vraag je je af? Nou, we wilden eerst je voeten nat maken met het concept van matching en hier komt het interessante deel.
Als je niet zeker weet of je per ongeluk “nick” hebt geschreven in plaats van “Nick” en je wilt dat ook matchen, dan zou je sed ‘s/Nick|nick/John/g’ kunnen gebruiken. De verticale balk heeft dezelfde betekenis die je zou kennen als je C zou gebruiken, dat wil zeggen, je expressie zal overeenkomen met Nick of nick. Zoals je zult zien, kan de pipe ook op andere manieren gebruikt worden, maar de betekenis blijft hetzelfde. Andere operatoren die veel gebruikt worden in regexps zijn ‘?’, die overeenkomen met nul of één instantie van het voorgaande element (flavou?r zal overeenkomen met flavor en flavour), ‘*’ betekent nul of meer en ‘+’ komt overeen met één of meer elementen. ^’ komt overeen met het begin van de string, terwijl ‘ Als u een vi(m) gebruiker bent, zullen sommige van deze dingen u misschien bekend voorkomen. Immers, deze utilities, samen met awk of C hebben hun wortels in de begindagen van Unix. We zullen hier niet verder op ingaan, omdat dingen eenvoudiger worden door voorbeelden te lezen, maar wat je moet weten is dat er verschillende implementaties van regexps zijn: POSIX, POSIX Extended, Perl of verschillende implementaties van fuzzy reguliere expressies, waar je gegarandeerd hoofdpijn van krijgt.
sed voorbeelden
Leren Linux sed commando met voorbeelden | |
---|---|
Linux commando syntax | Linux commando beschrijving |
sed 's/Nick/John/g' report.txt |
Vervang elk voorkomen van Nick door John in rapport.txt |
sed 's/Nick|nick/John/g' report.txt |
Vervang elk voorkomen van Nick of nick door John. |
sed 's/^/ /' file.txt >file_new.txt |
Voeg 8 spaties toe aan de linkerkant van een tekst voor mooi drukwerk. |
sed -n '/Of course/,/attention you \ |
Er wordt maar één alinea weergegeven, beginnend met “Natuurlijk” en eindigend met “aandacht die u betaalt” |
sed -n 12,18p file.txt |
Toon alleen de regels 12-18 van bestand.txt |
sed 12,18d file.txt |
Toon alles van bestand.txt behalve de regels van 12 tot en met 18 |
sed G file.txt |
Double-space file.txt |
sed -f script.sed file.txt |
Schrijf alle commando’s in script.sed en voer ze uit |
sed '5!s/ham/cheese/' file.txt |
Vervang ham door kaas in bestand.txt behalve in de 5e regel |
sed '$d' file.txt |
Verwijder de laatste regel |
sed '/\{3\}/p' file.txt |
Print alleen regels met drie opeenvolgende cijfers |
sed '/boom/!s/aaa/bb/' file.txt |
Of boom is gevonden vervang aaa door bb |
sed '17,/disk/d' file.txt |
Verwijder alle regels vanaf regel 17 tot ‘disk’ |
echo ONE TWO | sed "s/one/unos/I" |
Vervangt een met unos op een hoofdletter-ongevoelige manier, dus het zal “unos TWO” |
sed 'G;G' file.txt |
Drievoudige-ruimte een bestand |
sed 's/.$//' file.txt |
Een manier om dos2unix te vervangen 🙂 |
sed 's/^*//' file.txt |
Verwijder alle spaties voor elke regel van bestand.txt |
sed 's/*$//' file.txt |
Verwijder alle spaties aan het einde van elke regel van het bestand.txt |
sed 's/^*//;s/*$//' file.txt |
Verwijder alle spaties voor en aan het einde van elke regel van het bestand.txt |
sed 's/foo/bar/' file.txt |
Vervang foo door bar alleen voor de eerste instantie in een regel. |
sed 's/foo/bar/4' file.txt |
Vervang foo door bar alleen voor de 4e instantie in een regel. |
sed 's/foo/bar/g' file.txt |
Vervang foo door bar voor alle instanties in een regel. |
sed '/baz/s/foo/bar/g' file.txt |
Alleen als regel baz bevat, vervang foo door bar |
sed '/./,/^$/!d' file.txt |
Verwijder alle opeenvolgende lege regels behalve EOF |
sed '/^$/N;/\n$/D' file.txt |
Alle opeenvolgende lege regels verwijderen, maar staat toe alleen bovenste lege regel |
sed '/./,$!d' file.txt |
Verwijder alle voorlopende lege regels |
sed -e :a -e '/^\n*$/{$d;N;};/\n$/ba' \ |
Verwijder alle achteraanstaande lege regels |
sed -e :a -e '/\$/N; s/\\n//; ta' \ |
Als een bestand eindigt op een backslash, voeg het dan samen met de volgende (handig voor shell scripts) |
sed '/regex/,+5/expr/' |
Match regex plus de volgende 5 regels |
sed '1~3d' file.txt |
Verwijder elke derde regel, te beginnen met de eerste |
sed -n '2~5p' file.txt |
Print elke 5e regel, te beginnen met de tweede |
sed 's/ick/John/g' report.txt |
Een andere manier om een voorbeeld hierboven te schrijven. Kun je raden welke? |
sed -n '/RE/{p;q;}' file.txt |
Print alleen de eerste overeenkomst van RE (reguliere expressie) |
sed '0,/RE/{//d;}' file.txt |
Verwijder alleen de eerste overeenkomst |
sed '0,/RE/s//to_that/' file.txt |
Wijzig alleen de eerste overeenkomst |
sed 's/^*,/9999,/' file.csv |
Wijzig eerste veld naar 9999 in een CSV-bestand |
s/^ *\(.*\) *$/||/; |
sed script om CSV-bestand om te zetten naar balk-gescheiden (werkt alleen op sommige typen CSV, met ingesloten “s en komma’s) |
sed ':a;s/\(^\|\)\(\+\)\ |
Verander getallen uit bestand.txt van 1234.56 vormen in 1.234.56 |
sed -r "s/\<(reg|exp)+/\U&/g" |
Omzetten van elk woord dat begint met reg of exp naar hoofdletters |
sed '1,20 s/Johnson/White/g' file.txt |
Vervang Johnson alleen met Wit op strepen tussen 1 en 20 |
sed '1,20 !s/Johnson/White/g' file.txt |
Het bovenstaande omgekeerd (kom overeen met alle behalve de regels 1-20) |
sed '/from/,/until/ { s/\<red\>/magenta/g; \ |
Vervang alleen tussen “van” en “tot” |
sed '/ENDNOTES:/,$ { s/Schaff/Herzog/g; \ |
Vervang alleen vanaf het woord “ENDNOTES:” tot EOF |
sed '/./{H;$!d;};x;/regex/!d' file.txt |
Print paragrafen alleen als ze regex |
sed -e '/./{H;$!d;}' -e 'x;/RE1/!d;\ |
Print paragrafen alleen als ze RE1 bevatten, RE2 en RE3 |
sed ':a; /\$/N; s/\\n//; ta' file.txt |
Sluiten twee regels in de eerste eindigt in een backslash |
sed 's/14"/fourteen inches/g' file.txt |
Dit is hoe je dubbele aanhalingstekens kunt gebruiken |
sed 's/\/some\/UNIX\/path/\/a\/new\ |
Werken met Unix paden |
sed 's///g' file.txt |
Verwijder alle karakters van a tot g uit bestand.txt |
sed 's/\(.*\)foo/bar/' file.txt |
Vervang alleen de laatste overeenkomst van foo met bar |
sed '1!G;h;$!d' |
Een tac vervanger |
sed '/\n/!G;s/\(.\)\(.*\n\)/&\ |
Een rev vervanger |
sed 10q file.txt |
Een kopvervanger |
sed -e :a -e '$q;N;11,$D;ba' \ |
Een staartvervanger |
sed '$!N; /^\(.*\)\n$/!P; D' \ |
Een uniq-vervanger |
sed '$!N; s/^\(.*\)\n$//;\ |
Het tegenovergestelde (of uniq -d equivalent) |
sed '$!N;$!D' file.txt |
Equivalent aan staart -n 2 |
sed -n '$p' file.txt |
… tail -n 1 (of tail -1) |
sed '/regexp/!d' file.txt |
grep equivalent |
sed -n '/regexp/{g;1!p;};h' file.txt |
Print de regel vóór de regel die overeenkomt met regexp, maar niet degene die de regexp bevat |
sed -n '/regexp/{n;p;}' file.txt |
Print de regel na degene die overeenkomt met de regexp, maar
niet degene die de regexp bevat |
sed '/pattern/d' file.txt |
Verwijder regels die overeenkomen met het patroon |
sed '/./!d' file.txt |
Verwijder alle lege regels uit een bestand |
sed '/^$/N;/\n$/N;//D' file.txt |
Alle opeenvolgende lege regels verwijderen uitgezonderd de eerste twee |
sed -n '/^$/{p;h;};/./{x;/./p;}'\ |
Verwijder de laatste regel van elke alinea |
sed 's/.\x08//g' file |
Verwijder nroff overstakingen |
sed '/^$/q' |
Get mail header |
sed '1,/^$/d' |
Get mail body |
sed '/^Subject: */!d; s///;q' |
Ontvang onderwerp mail |
sed 's/^/> /' |
Vraag mailbericht op door een “> ” voor elke regel |
sed 's/^> //' |
Het tegenovergestelde (unquote mailbericht) |
sed -e :a -e 's/<*>//g;/</N;//ba' |
Verwijder HTML-tags |
sed '/./{H;d;};x;s/\n/={NL}=/g'\ |
Sorteer paragrafen van file.txt alfabetisch |
sed 's@/usr/bin@&/local@g' path.txt |
Vervang /usr/bin door /usr/bin/local in path.txt |
sed 's@^.*$@<<<&>>>@g' path.txt |
Probeer het en zie 🙂 |
sed 's/\(\/*\).*//g' path.txt |
Gegeven pad.txt bevat $PATH, dan echoën we alleen het eerste pad op elke regel |
sed 's/\(*\).*//' /etc/passwd |
awk replacement – geeft alleen de gebruikers weer uit het passwd-bestand |
echo "Welcome To The Geek Stuff" | sed \ |
Zelf-verklarend |
sed -e '/^$/,/^END/s/hills/\ |
Verwissel ‘heuvels’ voor ‘bergen’, maar alleen op blokken tekst die beginnen met een lege regel, en eindigen met een regel die begint met de drie tekens ‘EINDE’, inclusief |
sed -e '/^#/d' /etc/services | more |
Bekijk het services bestand zonder de becommentarieerde regels |
sed '$s@\(*\):\(*\):\(*\ |
Reverseer de volgorde van items in de laatste regel van path.txt |
sed -n -e '/regexp/{=;x;1!p;g;$!N;p;D;}'\ |
Print 1 regel van context voor en na de regel die overeenkomt, met een regelnummer waar de matching plaatsvindt |
sed '/regex/{x;p;x;}' bestand.txt |
Voeg een nieuwe regel in boven elke regel die overeenkomt met regex |
sed '/AAA/!d; /BBB/!d; /CCC/!d' file.txt |
Match AAA, BBB en CCC in die volgorde |
sed '/AAA.*BBB.*CCC/!d' file.txt |
Match AAA, BBB en CCC in die volgorde |
sed -n '/^.\{65\}/p' file.txt |
Print regels die 65 karakters of meer lang zijn |
sed -n '/^.\{65\}/!p' file.txt |
Regels afdrukken van 65 karakters lang of minder |
sed '/regex/G' bestand.txt |
Voeg lege regel in onder elke regel |
s '/regex/{x;p;x;G;}' bestand.txt |
Voeg lege regel in boven en onder |
sed = bestand.txt | sed 'N;s/\n/' |
Aantal regels in bestand.txt |
sed -e :a -e 's/^.\{1,78\}$/\ |
Tekst vlak rechts uitlijnen |
sed -e :a -e 's/^.\{{1,77}$/ &/;ta' -e \ |
Tekst centreren |
Conclusie
Dit is slechts een deel van wat er over sed verteld kan worden, maar deze serie is bedoeld als een praktische gids, dus we hopen dat het je helpt de kracht van Unix tools te ontdekken en efficiënter te worden in je werk.
het tegenovergestelde doet. If you’re a vi(m) user, some of these things might look familiar. After all, these utilities, together with awk or C have their roots in the early days of Unix. We won’t insist anymore on the subject, as things will become simpler by reading examples, but what you should know is that there are various implementations of regexps: POSIX, POSIX Extended, Perl or various implementations of fuzzy regular expressions, guaranteed to give you a headache.
sed examples
Learning Linux sed command with examples | |
---|---|
Linux command syntax | Linux command description |
sed 's/Nick/John/g' report.txt |
Replace every occurrence of Nick with John in report.txt |
sed 's/Nick|nick/John/g' report.txt |
Replace every occurrence of Nick or nick with John. |
sed 's/^/ /' file.txt >file_new.txt |
Add 8 spaces to the left of a text for pretty printing. |
sed -n '/Of course/,/attention you \ |
Display only one paragraph, starting with “Of course” and ending in “attention you pay” |
sed -n 12,18p file.txt |
Show only lines 12-18 of file.txt |
sed 12,18d file.txt |
Show all of file.txt except for lines from 12 to 18 |
sed G file.txt |
Double-space file.txt |
sed -f script.sed file.txt |
Write all commands in script.sed and execute them |
sed '5!s/ham/cheese/' file.txt |
Replace ham with cheese in file.txt except in the 5th line |
sed '$d' file.txt |
Delete the last line |
sed '/\{3\}/p' file.txt |
Print only lines with three consecutive digits |
sed '/boom/!s/aaa/bb/' file.txt |
Unless boom is found replace aaa with bb |
sed '17,/disk/d' file.txt |
Delete all lines from line 17 to ‘disk’ |
echo ONE TWO | sed "s/one/unos/I" |
Replaces one with unos in a case-insensitive manner, so it will print “unos TWO” |
sed 'G;G' file.txt |
Triple-space a file |
sed 's/.$//' file.txt |
A way to replace dos2unix 🙂 |
sed 's/^*//' file.txt |
Delete all spaces in front of every line of file.txt |
sed 's/*$//' file.txt |
Delete all spaces at the end of every line of file.txt |
sed 's/^*//;s/*$//' file.txt |
Delete all spaces in front and at the end of every line of file.txt |
sed 's/foo/bar/' file.txt |
Replace foo with bar only for the first instance in a line. |
sed 's/foo/bar/4' file.txt |
Replace foo with bar only for the 4th instance in a line. |
sed 's/foo/bar/g' file.txt |
Replace foo with bar for all instances in a line. |
sed '/baz/s/foo/bar/g' file.txt |
Only if line contains baz, substitute foo with bar |
sed '/./,/^$/!d' file.txt |
Delete all consecutive blank lines except for EOF |
sed '/^$/N;/\n$/D' file.txt |
Delete all consecutive blank lines, but allows only top blank line |
sed '/./,$!d' file.txt |
Delete all leading blank lines |
sed -e :a -e '/^\n*$/{$d;N;};/\n$/ba' \ |
Delete all trailing blank lines |
sed -e :a -e '/\$/N; s/\\n//; ta' \ |
If a file ends in a backslash, join it with the next (useful for shell scripts) |
sed '/regex/,+5/expr/' |
Match regex plus the next 5 lines |
sed '1~3d' file.txt |
Delete every third line, starting with the first |
sed -n '2~5p' file.txt |
Print every 5th line starting with the second |
sed 's/ick/John/g' report.txt |
Another way to write some example above. Can you guess which one? |
sed -n '/RE/{p;q;}' file.txt |
Print only the first match of RE (regular expression) |
sed '0,/RE/{//d;}' file.txt |
Delete only the first match |
sed '0,/RE/s//to_that/' file.txt |
Change only the first match |
sed 's/^*,/9999,/' file.csv |
Change first field to 9999 in a CSV file |
s/^ *\(.*\) *$/||/; |
sed script to convert CSV file to bar-separated (works only on some types of CSV, with embedded “s and commas) |
sed ':a;s/\(^\|\)\(\+\)\ |
Change numbers from file.txt from 1234.56 form to 1.234.56 |
sed -r "s/\<(reg|exp)+/\U&/g" |
Convert any word starting with reg or exp to uppercase |
sed '1,20 s/Johnson/White/g' file.txt |
Do replacement of Johnson with White only on lines between 1 and 20 |
sed '1,20 !s/Johnson/White/g' file.txt |
The above reversed (match all except lines 1-20) |
sed '/from/,/until/ { s/\<red\>/magenta/g; \ |
Replace only between “from” and “until” |
sed '/ENDNOTES:/,$ { s/Schaff/Herzog/g; \ |
Replace only from the word “ENDNOTES:” until EOF |
sed '/./{H;$!d;};x;/regex/!d' file.txt |
Print paragraphs only if they contain regex |
sed -e '/./{H;$!d;}' -e 'x;/RE1/!d;\ |
Print paragraphs only if they contain RE1, RE2 and RE3 |
sed ':a; /\$/N; s/\\n//; ta' file.txt |
Join two lines in the first ends in a backslash |
sed 's/14"/fourteen inches/g' file.txt |
This is how you can use double quotes |
sed 's/\/some\/UNIX\/path/\/a\/new\ |
Working with Unix paths |
sed 's///g' file.txt |
Remove all characters from a to g from file.txt |
sed 's/\(.*\)foo/bar/' file.txt |
Replace only the last match of foo with bar |
sed '1!G;h;$!d' |
A tac replacement |
sed '/\n/!G;s/\(.\)\(.*\n\)/&\ |
A rev replacement |
sed 10q file.txt |
A head replacement |
sed -e :a -e '$q;N;11,$D;ba' \ |
A tail replacement |
sed '$!N; /^\(.*\)\n$/!P; D' \ |
A uniq replacement |
sed '$!N; s/^\(.*\)\n$//;\ |
The opposite (or uniq -d equivalent) |
sed '$!N;$!D' file.txt |
Equivalent to tail -n 2 |
sed -n '$p' file.txt |
… tail -n 1 (or tail -1) |
sed '/regexp/!d' file.txt |
grep equivalent |
sed -n '/regexp/{g;1!p;};h' file.txt |
Print the line before the one matching regexp, but not the one containing the regexp |
sed -n '/regexp/{n;p;}' file.txt |
Print the line after the one matching the regexp, but
not the one containing the regexp |
sed '/pattern/d' file.txt |
Delete lines matching pattern |
sed '/./!d' file.txt |
Delete all blank lines from a file |
sed '/^$/N;/\n$/N;//D' file.txt |
Delete all consecutive blank lines except for the first two |
sed -n '/^$/{p;h;};/./{x;/./p;}'\ |
Delete the last line of each paragraph |
sed 's/.\x08//g' file |
Remove nroff overstrikes |
sed '/^$/q' |
Get mail header |
sed '1,/^$/d' |
Get mail body |
sed '/^Subject: */!d; s///;q' |
Get mail subject |
sed 's/^/> /' |
Quote mail message by inserting a “> ” in front of every line |
sed 's/^> //' |
The opposite (unquote mail message) |
sed -e :a -e 's/<*>//g;/</N;//ba' |
Remove HTML tags |
sed '/./{H;d;};x;s/\n/={NL}=/g'\ |
Sort paragraphs of file.txt alphabetically |
sed 's@/usr/bin@&/local@g' path.txt |
Replace /usr/bin with /usr/bin/local in path.txt |
sed 's@^.*$@<<<&>>>@g' path.txt |
Try it and see 🙂 |
sed 's/\(\/*\).*//g' path.txt |
Provided path.txt contains $PATH, this will echo only the first path on each line |
sed 's/\(*\).*//' /etc/passwd |
awk replacement – displays only the users from the passwd file |
echo "Welcome To The Geek Stuff" | sed \ |
Self-explanatory |
sed -e '/^$/,/^END/s/hills/\ |
Swap ‘hills’ for ‘mountains’, but only on blocks of text beginning with a blank line, and ending with a line beginning with the three characters ‘END’, inclusive |
sed -e '/^#/d' /etc/services | more |
View the services file without the commented lines |
sed '$s@\(*\):\(*\):\(*\ |
Reverse order of items in the last line of path.txt |
sed -n -e '/regexp/{=;x;1!p;g;$!N;p;D;}'\ |
Print 1 line of context before and after the line matching, with a line number where the matching occurs |
sed '/regex/{x;p;x;}' file.txt |
Insert a new line above every line matching regex |
sed '/AAA/!d; /BBB/!d; /CCC/!d' file.txt |
Match AAA, BBB and CCC in any order |
sed '/AAA.*BBB.*CCC/!d' file.txt |
Match AAA, BBB and CCC in that order |
sed -n '/^.\{65\}/p' file.txt |
Print lines 65 chars long or more |
sed -n '/^.\{65\}/!p' file.txt |
Print lines 65 chars long or less |
sed '/regex/G' file.txt |
Insert blank line below every line |
sed '/regex/{x;p;x;G;}' file.txt |
Insert blank line above and below |
sed = file.txt | sed 'N;s/\n/\t/' |
Number lines in file.txt |
sed -e :a -e 's/^.\{1,78\}$/\ |
Align text flush right |
sed -e :a -e 's/^.\{1,77\}$/ &/;ta' -e \ |
Align text center |
Conclusion
This is only a part of what can be told about sed, but this series is meant as a practical guide, so we hope it helps you discover the power of Unix tools and become more efficient in your work.