我需要一个命令来过滤 .txt 文件中的语句

我需要一个命令来过滤 .txt 文件中的语句

我有一个包含以下内容的文件:

select *
 from 
emp;


select *
 from
 dept;

selection
end;

我想获得这个输出:

select *
 from 
emp;


select *
 from
 dept;

我尝试使用

awk '/SELECT/{a=1} a; /;/{a=0}' XXARXADLMT.txt 

但这没有用。

答案1

即使您的文件比您插入的文件长,这也会起作用:

while read line; do
  if [[ "$line" == "select *" ]]; then
    echo "$line"
    read line
    echo "$line"
    read line
    echo "$line"
  fi
done < XXARXADLMT.txt

或者您可以将重复替换read line; echo $line;为:

for i in {1..2}; do read line; echo $line; done

答案2

如果我理解正确的话,您的脚本中有两个问题:

  • 区分大小写,
  • 较长单词的匹配部分。

此外,您可以使用逗号运算符来代替设置变量。

结论是,以下内容应该满足您的要求:

awk -v IGNORECASE=1 '/select /,/;/' XXARXADLMT.txt

答案3

perl -00 -n -e 'print if (m/select /i)' XXARXADLMT.txt 

这使用 的perl段落读取模式(选项)仅打印与不区分大小写的正则表达式(带有尾随空格)-00匹配的段落。select

“段落”是由 1 个或多个空行分隔的文本块。

输出:

select *
 from 
emp;

select *
 from
 dept;

(输出末尾还有另一个空行,但是由于 html 的变化无常和此站点的代码格式,它不会在此处显示)。

相关内容