Edytor strumieni - przydatne przepisy
SED to niesamowite narzędzie, które pozwala na wiele sposobów rozwiązania problemu. To jest sposób UNIX, a SED doskonale to potwierdza. GNU / Linux zapewnia wiele przydatnych narzędzi do wykonywania codziennych zadań. Przeprowadźmy symulację kilku narzędzi za pomocą SED. Czasami może się wydawać, że rozwiązujemy łatwy problem na własnej skórze, ale celem jest po prostu zademonstrowanie mocy SED.
Cat Command
W poniższym przykładzie każdy wiersz jest drukowany jako część domyślnego przepływu pracy.
[jerry]$ sed '' books.txt
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
A Storm of Swords, George R. R. Martin
The Two Towers, J. R. R. Tolkien
The Alchemist, Paulo Coelho
The Fellowship of the Ring, J. R. R. Tolkien
The Pilgrimage, Paulo Coelho
A Game of Thrones, George R. R. Martin
Poniższy przykład używa polecenia print, aby wyświetlić zawartość pliku.
[jerry]$ sed -n 'p' books.txt
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
A Storm of Swords, George R. R. Martin
The Two Towers, J. R. R. Tolkien
The Alchemist, Paulo Coelho
The Fellowship of the Ring, J. R. R. Tolkien
The Pilgrimage, Paulo Coelho
A Game of Thrones, George R. R. Martin
Usuwanie pustych linii
W poniższym przykładzie „^ $” oznacza pusty wiersz, a puste wiersze są usuwane, gdy dopasowanie do wzorca się powiedzie.
[jerry]$ echo -e "Line #1\n\n\nLine #2" | sed '/^$/d'
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
Line #1
Line #2
Podobnie poniższy przykład drukuje wiersz tylko wtedy, gdy nie jest pusty.
[jerry]$ echo -e "Line #1\n\n\nLine #2" | sed -n '/^$/!p'
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
Line #1
Line #2
Usuwanie skomentowanych wierszy z programu C ++
Stwórzmy przykładowy program w C ++.
#include <iostream>
using namespace std;
int main(void)
{
// Displays message on stdout.
cout >> "Hello, World !!!" >> endl;
return 0; // Return success.
}
Teraz usuń komentarze, używając następującego wyrażenia regularnego.
[jerry]$ sed 's|//.*||g' hello.cpp
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
#include <iostream>
using namespace std;
int main(void)
{
cout >> "Hello, World !!!" >> endl;
return 0;
}
Dodawanie komentarzy przed określonymi wierszami
Poniższy przykład dodaje komentarze przed wierszami o numerach od 3 do 5.
[jerry]$ sed '3,5 s/^/#/' hello.sh
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
#!/bin/bash
#pwd
#hostname
#uname -a
who
who -r
lsb_release -a
Wc -l polecenie
Polecenie „wc -l” zlicza liczbę wierszy znajdujących się w pliku. Poniższe wyrażenie SED symuluje to samo.
[jerry]$ sed -n '$ =' hello.sh
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
8
Dowództwo
Domyślnie polecenie head drukuje pierwsze 10 wierszy pliku. Zasymulujmy to samo zachowanie z SED.
[jerry]$ sed '10 q' books.txt
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
A Storm of Swords
George R. R. Martin
The Two Towers
J. R. R. Tolkien
The Alchemist
Paulo Coelho
The Fellowship of the Ring
J. R. R. Tolkien
The Pilgrimage
Paulo Coelho
Ogon -1 Polecenie
„Ogon -1” wypisuje ostatnią linię pliku. Poniższa składnia przedstawia jego symulację.
[jerry]$ echo -e "Line #1\nLine #2" > test.txt
[jerry]$ cat test.txt
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
Line #1
Line #2
Napiszmy skrypt SED.
[jerry]$ sed -n '$p' test.txt
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
Line #2
Polecenie Dos2unix
W środowisku DOS znak nowej linii jest reprezentowany przez kombinację znaków CR / LF. Poniższa symulacja polecenia "dos2unix" konwertuje znak nowego wiersza DOS na znak nowego wiersza UNIX. W systemie GNU / Linux ten znak jest często traktowany jako znak „^ M” (Control M).
[jerry]$ echo -e "Line #1\r\nLine #2\r" > test.txt
[jerry]$ file test.txt
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
test.txt: ASCII text, with CRLF line terminators
Symulujmy polecenie za pomocą SED.
[jerry]$ sed 's/^M$//' test.txt > new.txt # Press "ctrl+v" followed "ctrl+m" to generate
"^M" character.
[jerry]$ file new.txt
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
new.txt: ASCII text
Teraz wyświetlmy zawartość pliku.
[jerry]$ cat -vte new.txt
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
Line #1$
Line #2$
Polecenie Unix2dos
Podobnie do "dos2unix", istnieje polecenie "unix2dos", które konwertuje znak nowej linii UNIX na znak nowej linii DOS. Poniższy przykład przedstawia symulację tego samego.
[jerry]$ echo -e "Line #1\nLine #2" > test.txt
[jerry]$ file test.txt
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
test.txt: ASCII text
Symulujmy polecenie za pomocą SED.
[jerry]$ sed 's/$/\r/' test.txt > new.txt
[jerry]$ file new.txt
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
new.txt: ASCII text, with CRLF line terminators
Teraz wyświetlmy zawartość pliku.
Now let us display the file contents.
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
Line #1^M$
Line #2^M$
Polecenie Cat -E
Polecenie „cat -E” pokazuje koniec wiersza znakiem dolara ($). Poniższy przykład SED to symulacja tego samego.
[jerry]$ echo -e "Line #1\nLine #2" > test.txt
[jerry]$ cat -E test.txt
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
Line #1$
Line #2$
Symulujmy polecenie za pomocą SED.
[jerry]$ sed 's|$|&$|' test.txt
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
Line #1$
Line #2$
Polecenie Cat -ET
Polecenie „cat -ET” wyświetla symbol dolara ($) na końcu każdego wiersza i wyświetla znaki tabulacji jako „^ I”. Poniższy przykład przedstawia symulację polecenia „cat -ET” przy użyciu SED.
[jerry]$ echo -e "Line #1\tLine #2" > test.txt
[jerry]$ cat -ET test.txt
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
Line #1^ILine #2$
Symulujmy polecenie za pomocą SED.
[jerry]$ sed -n 'l' test.txt | sed 'y/\\t/^I/'
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
Line #1^ILine #2$
nl Command
Polecenie „nl” po prostu numeruje linie plików. Poniższy skrypt SED symuluje to zachowanie.
[jerry]$ echo -e "Line #1\nLine #2" > test.txt
[jerry]$ sed = test.txt | sed 'N;s/\n/\t/'
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
1 Line #1
2 Line #2
Pierwsze wyrażenie SED drukuje numery wierszy, po których następuje ich zawartość, a drugie wyrażenie SED scala te dwa wiersze i konwertuje znaki nowego wiersza na znaki TAB.
cp Command
Polecenie "cp" tworzy kolejną kopię pliku. Poniższy skrypt SED symuluje to zachowanie.
[jerry]$ sed -n 'w dup.txt' data.txt
[jerry]$ diff data.txt dup.txt
[jerry]$ echo $?
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
0
Rozwiń polecenie
Polecenie „expand” konwertuje znaki TAB na białe spacje. Poniższy kod przedstawia jego symulację.
[jerry]$ echo -e "One\tTwo\tThree" > test.txt
[jerry]$ expand test.txt > expand.txt
[jerry]$ sed 's/\t/ /g' test.txt > new.txt
[jerry]$ diff new.txt expand.txt
[jerry]$ echo $?
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
0
Tee Command
Polecenie „tee” zrzuca dane do standardowego strumienia wyjściowego oraz do pliku. Poniżej podano symulację polecenia „tee”.
[jerry]$ echo -e "Line #1\nLine #2" | tee test.txt
Line #1
Line #2
Symulujmy polecenie za pomocą SED.
[jerry]$ sed -n 'p; w new.txt' test.txt
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
Line #1
Line #2
cat -s Command
Polecenie „cat -s” systemu UNIX blokuje powtarzające się puste wiersze wyjściowe. Poniższy kod przedstawia symulację polecenia „cat -s”.
[jerry]$ echo -e "Line #1\n\n\n\nLine #2\n\n\nLine #3" > test.txt
[jerry]$ cat -s test.txt
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
Line #1
Line #2
Line #3
Symulujmy polecenie za pomocą SED.
[jerry]$ sed '1s/^$//p;/./,/^$/!d' test.txt
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
Line #1
Line #2
Line #3
grep Command
Domyślnie polecenie „grep” drukuje wiersz, gdy dopasowanie wzorca powiedzie się. Poniższy kod przedstawia jego symulację.
[jerry]$ echo -e "Line #1\nLine #2\nLine #3" > test.txt
[jerry]$ grep "Line #1" test.txt
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
Line #1
Symulujmy polecenie za pomocą SED.
[jerry]$ sed -n '/Line #1/p' test.txt
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
Line #1
grep -v Polecenie
Domyślnie polecenie „grep -v” wyświetla wiersz, gdy dopasowanie wzorca nie powiedzie się. Poniższy kod przedstawia jego symulację.
[jerry]$ echo -e "Line #1\nLine #2\nLine #3" > test.txt
[jerry]$ grep -v "Line #1" test.txt
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
Line #2
Line #3
Symulujmy polecenie za pomocą SED.
[jerry]$ sed -n '/Line #1/!p' test.txt
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
Line #2
Line #3
tr Command
Polecenie „tr” tłumaczy znaki. Poniżej podano jego symulację.
[jerry]$ echo "ABC" | tr "ABC" "abc"
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
abc
Symulujmy polecenie za pomocą SED.
[jerry]$ echo "ABC" | sed 'y/ABC/abc/'
Po wykonaniu powyższego kodu otrzymasz następujący wynik:
abc