Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash脚本从文件中回显某些行_Bash - Fatal编程技术网

Bash脚本从文件中回显某些行

Bash脚本从文件中回显某些行,bash,Bash,我有一个大文件,看起来像这样: line1 line2 line3; line5 line6; line7 line9 line10; 基本上,它是一堆行,其中一些以分号结尾。这些带有分号的行后面可能有空行,也可能没有空行 我想用这个文件做一些看起来相对简单的事情,但是我还没有想出一个方法来做。我想调用一个bash脚本,该脚本将识别以分号结尾的行,并在每行后面回显第一个非空行 因此,在上面的示例中,输出将是: line5 line7 我尝试了几种不同的方法,包括在整个文件中循环,使用正则

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

line1
line2
line3;

line5
line6;
line7

line9
line10;
基本上,它是一堆行,其中一些以分号结尾。这些带有分号的行后面可能有空行,也可能没有空行

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

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

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


似乎应该有更简单的方法,也许是使用grep,但我似乎想不出来。有什么好方法可以实现这一点吗?

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
$cat数据
第1行
第2行
第3行;
第5行
第6行;
第7行
第9行
第10行;
$awk'/$/{print_next=1;next}(/^[^].$/&&print_next){print;print_next=0}'
试试这个命令:

sed '/^$/d' file | sed -n '/;/{n;p}'
  • 删除空行
  • 打印以下行
如果您只需要“grep”解决方案

grep -v "^$" file | grep -A1 ";" | grep -v ";\|--"
试试“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

是否有两行以“;”结尾的连续行您需要在“;”之后的第一个非空行或者第一个非空行不以“;”结尾?好问题。可能有两个以“;”结尾的连续行。如果是这样的话,我想要第二行。所以我在寻找“;”之后的第一个非空行,不管它是否有一个“;”或者不是。