SED - 在每个由大写字母和空格组成的输入行后插入一个空行

时间:2018-01-07 15:32:36

标签: linux bash sed

我有一个文本文件,我需要一个使用sed的命令,在每行只包含大写字母和空格后插入一个空行。

3 个答案:

答案 0 :(得分:3)

这可能适合你(GNU sed):

sed '/^[[:blank:][:upper:]][[:blank:][:upper:]]*$/G' file

这会将保留空间(默认情况下包含换行符)附加到包含至少一个或多个空格或大写字符的行。

答案 1 :(得分:2)

假设:

object Interpreter extends (StartupActionA ~> Id) {

  override def apply[A](fa: StartupActionA[A]): Id[A] = fa match {
    case StartCluster =>
      println("Starting up the Akka Cluster").asInstanceOf[A]
    case StartEventActorShard =>
      system.actorOf(Props(new MyActor()), "MyActor").asInstanceOf[A]
    case StartKafka(ref) =>
      Some(ref).asInstanceOf[A]
  }
}

您可以使用$ cat file LINE LINE LINE Line Line Line Line 1 LINE 2 END! ==== 向该行添加s///

使用POSIX sed,在sed脚本中使用文字新行:

\n

使用GNU sed,您可以使用$ sed 's/^\([[:upper:][:blank:]]*\)$/\1\ /' file LINE LINE LINE Line Line Line Line 1 LINE 2 END! ====

的表示形式
\n

您也可以使用$ sed 's/^\([[:upper:][:blank:]]*\)$/\1\n/' file 附加到sed中。我试图让sed a\工作,但由于POSIX和BSD不支持append

,因此无法可靠地使用POSIX,BSD和GNU。

使用GNU sed(注意\n之后的空格):

a\

BSD:

 $ sed '/^[[:upper:][:blank:]]*$/a\ ' file

由于GNU版本在空白行上有空格,因此它们不完全等效。

POSIX sed的版本我没有使用其中任何一个......

鉴于$ sed '/^[[:upper:][:blank:]]*$/a\ \ ' file 的平台和版本差异,您可能会考虑sed来执行此操作,因为简单的awk更容易普及。

这适用于我拥有的每个awk

awk

使用$ awk '1; /^[[:upper:][:blank:]]*$/{print ""}' file 你也可以通过确保至少非空白来使空白行不加倍:

awk

答案 2 :(得分:0)

不确定。只需使用a插入行:

sed '/^[[:blank:]A-Z]*$/a\'

a命令在每个匹配行之后插入字符串(用反斜杠结束字符串)。所以上面的命令只是在包含大写字母和空格的所有行之后插入一个空行。这正是你想要的。