Bash脚本用于回显文件中的某些行

时间:2013-12-05 03:15:27

标签: bash

我有一个大文件,看起来像这样:

line1
line2
line3;

line5
line6;
line7

line9
line10;

基本上,它是一堆行,其中一些以分号结尾。用分号后这些行后面可能有空行。

我想用这个文件做一些看似相对简单的事情,但是我还没有办法做到这一点。我想调用一个bash脚本来识别那些以分号结尾的行,并在每个行之后回显第一个非空行。

因此,在上面的例子中,输出将是:

line5
line7

我尝试了几种不同的方法,包括循环遍历整个文件,使用正则表达式检查当前行是否以分号结束,并切​​换布尔变量以确定是否应回显下一个非空行。但我没有运气。

似乎应该有更简单的方法,也许使用grep,但我似乎无法想出它。关于实现这个的好方法的任何想法?

4 个答案:

答案 0 :(得分:1)

Awk非常适合这类事情。

$ cat data
line1
line2
line3;

line5
line6;
line7

line9
line10;
$ awk '/;$/{print_next=1; next} (/^[^ ].*$/ && print_next) {print; print_next=0}' < data
line5
line7

答案 1 :(得分:1)

尝试此命令:

sed '/^$/d' file | sed -n '/;/{n;p}'
  • 删除空行
  • 打印行;

答案 2 :(得分:0)

如果您想要“grep”唯一解决方案

grep -v "^$" file | grep -A1 ";" | grep -v ";\|--"

答案 3 :(得分:0)

尝试“sed -e'/; $ / d'test.txt”命令,它的工作原理。

 # cat test.txt 
 line1
 line2
 line3;

 line5
 line6;
 line7

 line9
 line10;


 # sed -e '/;$/d' test.txt > lines.txt

 # cat lines.txt 
 line1
 line2

 line5
 line7

 line9