我有一个大文件,看起来像这样:
line1
line2
line3;
line5
line6;
line7
line9
line10;
基本上,它是一堆行,其中一些以分号结尾。用分号后这些行后面可能有空行。
我想用这个文件做一些看似相对简单的事情,但是我还没有办法做到这一点。我想调用一个bash脚本来识别那些以分号结尾的行,并在每个行之后回显第一个非空行。
因此,在上面的例子中,输出将是:
line5
line7
我尝试了几种不同的方法,包括循环遍历整个文件,使用正则表达式检查当前行是否以分号结束,并切换布尔变量以确定是否应回显下一个非空行。但我没有运气。
似乎应该有更简单的方法,也许使用grep,但我似乎无法想出它。关于实现这个的好方法的任何想法?
答案 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