有没有办法找到两个相邻的新行是否以某些单词开头?

Jam*_*man 5 bash perl grep sed

说我有这样的文件:

+jaklfjdskalfjkdsaj
fkldsjafkljdkaljfsd
-jslakflkdsalfkdls;
+sdjafkdjsakfjdskal
Run Code Online (Sandbox Code Playgroud)

我只想查找并计算在此文件中开始-的行后面紧跟一行开头的次数+.

规则:

  • 没有外部脚本
  • 必须在bash脚本中完成
  • 必须是内联的

例如,我可以弄清楚如何在Python脚本中执行此操作,但我从来没有在Bash中做过这么广泛的事情.

任何人都可以帮我吗?我认为它最终会成为grep,perl或者也许是一个有才能的sed线 - 但这些是我仍在学习的东西.

谢谢你们!

Tom*_*ton 8

grep -A1 "^-" $file | grep "^+" | wc -l

第一个grep查找所有以#开头的行-,并-A1使其也在匹配后输出该行.

然后我们将grep输出为任何以#开头的行+.从逻辑上讲:

  1. 我们知道第一个grep的输出只是-XXX行和以下行
  2. 我们知道一条+xxx线也不能是一条-xxx线

因此,任何+xxx行必须跟随行,并且应该计算,我们这样做wc -l


cho*_*oba 6

易于使用Perl:

perl -lne '$c++ if $p and /^\+/; $p = /^-/ }{ print $c' FILE
Run Code Online (Sandbox Code Playgroud)