Pojďme se Snažit Provést příkaz sed
Uvažujme vzorek CSV soubor s následujícím obsahem:
$ cat file
Solaris,25,11
Ubuntu,31,2
Fedora,21,3
LinuxMint,45,4
RedHat,12,5
- Odstranit 1. poli nebo sloupci :
$ sed 's/[^,]*,//' file
25,11
31,2
21,3
45,4
12,5
Tento regulární výraz vyhledávání pro sekvence non-čárkou([^,]*) znaky a odstraní je, které výsledky v 1. poli získávání odstraněn.
- Chcete-li vytisknout pouze poslední pole, NEBO odstranit všechna pole s výjimkou poslední oblasti:
$ sed 's/.*,//' file
11
2
3
4
5
Tento regulární výraz odstraní vše až na poslední čárkou(.*,) které výsledky v odstraňování všech oblastech, až na poslední pole.
- Vytiskněte pouze 1. pole:
$ sed 's/,.*//' file
Solaris
Ubuntu
Fedora
LinuxMint
RedHat
Tento regex(,.*) odstraňuje znaky počínaje 1. čárka do konce, což vede k vymazání všech polí s výjimkou posledního pole.
- Odstranit 2. pole:
$ sed 's/,[^,]*,/,/' file
Solaris,11
Ubuntu,2
Fedora,3
LinuxMint,4
RedHat,5
Regulární výrazy (,[^,]*,) hledá čárku a posloupnost znaků, následovaný čárkou, které výsledky v odpovídající 2. sloupec, a nahrazuje tento vzor uzavřeno jen s čárkou, nakonec končí v odstranění 2. sloupce.
Poznámka: Chcete-li odstranit pole v blízkém dostane více tvrdší, v sedu, protože každé pole musí být uzavřeno doslova.
- Chcete-li vytisknout pouze 2 pole:
$ sed 's/[^,]*,\([^,]*\).*/\1/' file
25
31
21
45
12
Ten regulární výraz se shoduje s první pole, druhé pole a zbytek, nicméně skupiny 2. pole sám. Celá linka je nyní nahrazena 2. pole(\1), tedy pouze 2. pole se zobrazí.
- Tisk pouze řádky, v nichž posledním sloupci je jednociferné číslo:
$ sed -n '/.*,[0-9]$/p' file
Ubuntu,31,2
Fedora,21,3
LinuxMint,45,4
RedHat,12,5
Regulární výrazy (,[0-9]$) kontroly pro jednotlivé číslice v posledním poli a p příkaz vytiskne čáru, která odpovídá tomuto stavu.
- Na počet všech řádků v souboru:
$ sed = file | sed 'N;s/\n/ /'
1 Solaris,25,11
2 Ubuntu,31,2
3 Fedora,21,3
4 LinuxMint,45,4
5 RedHat,12,5
Tohle je simulace cat -n příkaz. awk se to snadno pomocí speciální proměnné NR. '=' Příkaz sed dává číslo řádku pro každý řádek následovaný řádku sám. Sed výstup je přesměrován do jiného sed příkaz připojit každé 2 řádky.
- Nahradit poslední pole 99, pokud 1. pole je 'Ubuntu':
$ sed 's/\(Ubuntu\)\(,.*,\).*/\1\299/' file
Solaris,25,11
Ubuntu,31,99
Fedora,21,3
LinuxMint,45,4
RedHat,12,5
Tento regulární výraz se shoduje 'Ubuntu' a až do konce kromě poslední sloupec a skupiny, každý z nich stejně. Na náhradní díl, 1. a 2. skupiny spolu s novým číslem 99 je nahradit.
- Odstranit 2nd pole, pokud 1. pole je 'RedHat':
$ sed 's/\(RedHat,\)[^,]*\(.*\)/\1\2/' file
Solaris,25,11
Ubuntu,31,2
Fedora,21,3
LinuxMint,45,4
RedHat,,5
1. pole 'RedHat', 2. pole a zbývající pole jsou seskupeny, a výměna se provádí pouze s 1. a poslední skupina , resuting v získání 2. pole odstraněny.
- Chcete-li vložit nový sloupec na konci(poslední sloupec) :
$ sed 's/.*/&,A/' file
Solaris,25,11,A
Ubuntu,31,2,A
Fedora,21,3,A
LinuxMint,45,4,A
RedHat,12,5,A
Regulárního výrazu (.*) zápasy celé linky a nahradí ji linka sám (a) a nové pole.
- Chcete-li vložit nový sloupec na začátek(1. sloupec):
$ sed 's/.*/A,&/' file
A,Solaris,25,11
A,Ubuntu,31,2
A,Fedora,21,3
A,LinuxMint,45,4
A,RedHat,12,5
Stejně jako minulý příklad, jen linka uzavřeno následuje nový sloupec
Doufám, že to pomůže. Dejte mi vědět, pokud budete muset použít Awk nebo jakýkoli jiný příkaz.
Děkuji
sed -Ei "$rownum s/$newvalue/$col" file.csv
a hodilo to chybu, ale chtěli By vědět více o této. Jakýkoli prostředek, aby si na by bylo užitečné, stejně.