删除图案之间的空白行

use*_*723 2 linux awk sed

我希望用sed或awk删除文件中的空行(换行,制表符和空格),但前提是这些空行在两个模式之间.

lorem lorem PATTERN1

\t

PATTERN2 lorem2 lorem2`
Run Code Online (Sandbox Code Playgroud)

我期望下面的结果是两个模式的两行连接.

lorem lorem PATTERN1PATTERN2 lorem2 lorem2
Run Code Online (Sandbox Code Playgroud)

pot*_*ong 5

这可能适合你(GNU sed):

sed -r '/PATTERN1/!b;:a;/PATTERN2/bb;$!{N;ba};:b;s/(PATTERN1.*)[ \t\n]+(.*PATTERN2)/\1\2/;tb' file
Run Code Online (Sandbox Code Playgroud)
  • /PATTERN1/!b 只需打印该行,除非它包含第一个模式
  • :a;/PATTERN2/bb;$!{N;ba} 将后续行读入模式空间(PS),直到遇到第二个模式
  • :b;s/(PATTERN1.*)[ \t\n]+(.*PATTERN2)/;tb 替换第一个和第二个模式之间的所有空格,制表符和换行符.