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