Poďme sa snaží Implementovať sed príkaz
Uvážme vzorky CSV súbor s nasledujúcim obsahom:
$ cat file
Solaris,25,11
Ubuntu,31,2
Fedora,21,3
LinuxMint,45,4
RedHat,12,5
- Ak chcete odstrániť 1. pole alebo stĺpec :
$ sed 's/[^,]*,//' file
25,11
31,2
21,3
45,4
12,5
Tento regulárny výraz sa vyhľadáva postupnosť non-čiarka([^,]*) znaky a odstráni ich, ktorého výsledky v 1. poli dostať odstránené.
- Ak chcete vytlačiť iba posledné pole, ALEBO odstrániť všetky polia okrem poslednej oblasti:
$ sed 's/.*,//' file
11
2
3
4
5
Tento regulárny výraz odstraňuje všetko do poslednej čiarky(.*,) ktoré majú za následok vymazanie všetkých oblastiach okrem posledného poľa.
- Ak chcete vytlačiť iba 1. poľa:
$ sed 's/,.*//' file
Solaris
Ubuntu
Fedora
LinuxMint
RedHat
Tento regulárny výraz(,.*) odstráni znaky od 1. comma do konca následok vymazanie všetkých oblastiach okrem posledného poľa.
- Ak chcete vymazať 2. pole:
$ sed 's/,[^,]*,/,/' file
Solaris,11
Ubuntu,2
Fedora,3
LinuxMint,4
RedHat,5
Na regulárny výraz (,[^,]*,) vyhľadá čiarkou a postupnosť znakov, po ktorom nasleduje čiarka, ktorej výsledkom zodpovedajúce 2. stĺpec, a nahradí tento vzor sa zhodovali s len čiarka, nakoniec končí v odstránením 2. stĺpec.
Poznámka: Ak chcete odstrániť pole v strede dostane viac tvrdšie v sed, pretože každé pole má byť uzavreté doslova.
- Ak chcete vytlačiť iba 2. pole:
$ sed 's/[^,]*,\([^,]*\).*/\1/' file
25
31
21
45
12
Na regulárny výraz zodpovedá prvé pole, druhé pole a zvyšok, avšak skupín 2. pole sám. Celá linka je teraz nahradené 2. pole(\1), teda iba 2. pole dostane zobrazí.
- Tlač len tie riadky, v ktorých poslednom stĺpci je jeden miestne číslo:
$ sed -n '/.*,[0-9]$/p' file
Ubuntu,31,2
Fedora,21,3
LinuxMint,45,4
RedHat,12,5
Na regulárny výraz (,[0-9]$) kontroly pre jednu číslicu do posledného poľa a p príkaz vypíše riadok, ktorý spĺňa túto podmienku.
- Na počet všetky riadky v súbore:
$ 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
Toto je simulácia mačka -n príkaz. ispell funguje to jednoducho pomocou špeciálnej premennej NR. V '=' príkaz sed dáva číslo riadka každého riadku nasleduje riadok sám. Sed výstup je odvedený do iného sed príkaz pripojiť každé 2 riadky.
- Nahradiť posledné pole 99, ak 1. je pole 'Ubuntu':
$ sed 's/\(Ubuntu\)\(,.*,\).*/\1\299/' file
Solaris,25,11
Ubuntu,31,99
Fedora,21,3
LinuxMint,45,4
RedHat,12,5
Tento regulárny výraz zápasy 'Ubuntu" a až do konca, okrem posledného stĺpca a skupín, každá z nich rovnako. V náhradný diel, 1. a 2. skupina spolu s novým číslom 99 je podmienkou.
- Vymazať 2. pole, ak 1. je pole '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. oblasti, a zostávajúce polia sú zoskupené, a náhrada sa vykonáva len s 1. a posledná skupina , resuting do získania 2. pole zmazané.
- Ak chcete vložiť nový stĺpec na konci(posledný stĺpec) :
$ sed 's/.*/&,A/' file
Solaris,25,11,A
Ubuntu,31,2,A
Fedora,21,3,A
LinuxMint,45,4,A
RedHat,12,5,A
Na regulárny výraz (.*) zápasy celý riadok, a nahradiť ju riadok sám (&) a nové oblasti.
- Ak chcete vložiť nový stĺpec na začiatku(1. stĺpec):
$ sed 's/.*/A,&/' file
A,Solaris,25,11
A,Ubuntu,31,2
A,Fedora,21,3
A,LinuxMint,45,4
A,RedHat,12,5
Rovnaké ako posledný príklad, len riadok uzavreté nasleduje nový stĺpec
Dúfam, že to pomôže. Dajte mi vedieť, ak potrebujete použiť Ispell alebo akýkoľvek iný príkaz.
Ďakujeme
sed -Ei "$rownum s/$newvalue/$col" file.csv
a to hodil chybu, ale chcel By som vedieť viac o tejto. Akýkoľvek zdroj čítať po by bolo užitočné, rovnako.