Ran*_*han 23 grep sed awk text-processing
我想从行CK尾的行开始 grepping,并在行尾时停止 grepping D。我试过了grep "$CK" "$D" file..txt,但没有用。
输入:
kkkkkkkkkkk
jjjjjjjjjjjjjjjjjj
gggggggggggg/CK
JHGHHHHHHHH
HJKHKKLKLLL
JNBHBHJKJJLKKL
JLKKKLLKJLKJ/D
GGGGGGGGGGGGGG
GGGGGGGGGGGGGG
Run Code Online (Sandbox Code Playgroud)
所需的输出:
gggggggggggg/CK
JHGHHHHHHHH
HJKHKKLKLLL
JNBHBHJKJJLKKL
JLKKKLLKJLKJ/D
Run Code Online (Sandbox Code Playgroud)
iru*_*var 27
awk '/CK$/,/D$/' file.txt
Run Code Online (Sandbox Code Playgroud)
或者
sed -n '/CK$/,/D$/p' file.txt
Run Code Online (Sandbox Code Playgroud)
如果您坚持使用grep,这是一种 GNU grep 方式
grep -oPz '(?s)(?<=\n)\N+CK\n.*?D(?=\n)' file.txt
Run Code Online (Sandbox Code Playgroud)
这里
-P 激活 perl-regexp
-z将行分隔符设置为 NUL。这会强制 grep 将整个文件视为一行
-o 打印仅匹配
(?s)激活 PCRE_DOTALL,因此.找到任何字符或换行符
\N 匹配除换行符以外的任何内容
.*?发现 . 在非贪婪模式下
(?<=..) 是后视断言
(?=..) 是一个前瞻断言