Chci začít grepovat z řádků, které mají CK na konci řádku a přestat grepovat, když má řádek D na konci. Zkusil jsem grep "$CK" "$D" file..txt , ale nefungovalo to.
Vstup:
kkkkkkkkkkk
jjjjjjjjjjjjjjjjjj
gggggggggggg/CK
JHGHHHHHHHH
HJKHKKLKLLL
JNBHBHJKJJLKKL
JLKKKLLKJLKJ/D
GGGGGGGGGGGGGG
GGGGGGGGGGGGGG
Požadovaný výstup:
gggggggggggg/CK
JHGHHHHHHHH
HJKHKKLKLLL
JNBHBHJKJJLKKL
JLKKKLLKJLKJ/D
Přijatá odpověď:
Je lepší použít awk nebo sed
awk '/CK$/,/D$/' file.txt
NEBO
sed -n '/CK$/,/D$/p' file.txt
Pokud trváte na grep, zde je způsob GNU grep
grep -oPz '(?s)(?<=n)N+CKn.*?D(?=n)' file.txt
Zde
-P aktivuje perl-regexp
-z nastaví oddělovač řádků na NUL. To nutí grep vidět celý soubor jako jeden řádek
-o vytiskne pouze odpovídající
(?s) aktivuje PCRE_DOTALL, takže . najde jakýkoli znak nebo nový řádek
N odpovídá čemukoli kromě nového řádku
.*? najde . v režimu nongreedy
(?<=..) je tvrzení o pohledu zezadu
(?=..) je dopředné tvrzení
Syntaxe tohoto Shell/bash:Somevariable=somevalue Somecommand?
Jak udělat Ls a pak seřadit výsledky podle data vytvoření?