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í?