GNU/Linux >> Znalost Linux >  >> Linux

Jak hledat obsah po vzoru?

sed -n 's/^potato:[[:space:]]*//p' file.txt

O Grepovi lze uvažovat jako o omezeném Sedovi nebo o Sedovi jako o zobecněném Grepovi. V tomto případě je Sed dobrý a lehký nástroj, který dělá to, co chcete – i když samozřejmě existuje několik dalších rozumných způsobů, jak to udělat.


grep -Po 'potato:\s\K.*' file

-P použít regulární výraz Perl

-o na výstup pouze shoda

\s aby odpovídala mezerě za potato:

\K vynechat zápas

.* aby odpovídal zbytku řetězce (řetězců)


Nebo použijte výrazy regulárního výrazu:grep -oP '(?<=potato: ).*' file.txt


grep 'potato:' file.txt | sed 's/^.*: //'

grep hledá jakýkoli řádek, který obsahuje řetězec potato: , pak pro každý z těchto řádků sed nahradí (s/// - nahradit) libovolný znak (.* ) od začátku řádku (^ ) až do posledního výskytu sekvence : (dvojtečka následovaná mezerou) s prázdným řetězcem (s/...// - nahraďte první část druhou částí, která je prázdná).

nebo

grep 'potato:' file.txt | cut -d\   -f2

Pro každý řádek, který obsahuje potato: , cut rozdělí řádek do více polí oddělených mezerou (-d\ - d =oddělovač, \ =znak mezery, něco jako -d" " by také fungovalo) a vytiskněte druhé pole každého takového řádku (-f2 ).

nebo

grep 'potato:' file.txt | awk '{print $2}'

Pro každý řádek, který obsahuje potato: , awk vytiskne druhé pole (print $2 ), která je ve výchozím nastavení oddělena mezerami.

nebo

grep 'potato:' file.txt | perl -e 'for(<>){s/^.*: //;print}'

Všechny řádky, které obsahují potato: jsou odesílány na řádek (-e ) Perl skript, který přebírá všechny řádky z stdin , pak pro každý z těchto řádků provede stejnou substituci jako v prvním příkladu výše a poté ji vypíše.

nebo

awk '{if(/potato:/) print $2}' < file.txt

Soubor je odeslán prostřednictvím stdin (< file.txt odešle obsah souboru pomocí stdin na příkaz vlevo) na awk skript, který pro každý řádek obsahující potato: (if(/potato:/) vrátí hodnotu true, pokud je regulární výraz /potato:/ odpovídá aktuálnímu řádku), vytiskne druhé pole, jak je popsáno výše.

nebo

perl -e 'for(<>){/potato:/ && s/^.*: // && print}' < file.txt

Soubor je odeslán prostřednictvím stdin (< file.txt , viz výše) na skript v Perlu, který funguje podobně jako výše uvedený, ale tentokrát také zajišťuje, že každý řádek obsahuje řetězec potato: (/potato:/ je regulární výraz, který odpovídá, pokud aktuální řádek obsahuje potato: , a pokud ano (&& ), poté pokračuje v aplikaci regulárního výrazu popsaného výše a vytiskne výsledek).


Linux
  1. Linux – Jak vědět, co dělat Grep v Dmesg?

  2. Jak spočítat počet řádků v souboru po zápase Grep?

  3. Jak se popasovat s barevným výstupem

  1. Jak grepovat část souboru v bash shellu

  2. grep dvojice vzorů a souboru

  3. Jak v linuxu vidím du v GB místo MB?

  1. Jak obnovit data Xfs po Rm?

  2. Jak se zotavit poté, co Kate havaruje?

  3. Grep Jak potlačit zobrazení neshodného souboru?