如何在同一行的2个特定字符之间插入新行?

时间:2017-12-08 13:58:48

标签: bash shell powershell sed grep

我希望每次在同一行的文本文件中出现两个Curly括号时插入一个新行,但是我希望在第一个大括号之后或第二个大括号之前插入这个新行。 有没有办法通过使用sed,grep等命令来实现这一目的。

以下是一个例子:

在:

  

你好,你好吗?

     

我没事。 }感谢{..

后:

  

你好,{

     你好吗?

     

我没事。 }

     

感谢{..

(或)

  

您好,{how

     你是吗?

     

我没事。 }感谢

     

{..

我试过下面的命令,但是即使文件中的行有单个花括号,它也会添加新行,我想只在有两个括号的情况下才添加新行:

  • sed -i' s / {/& \ n /'文件名| grep -n"}"文件名| grep" {"

(或)

  • sed -i' s /} /& \ n /'文件名| grep -n"}"文件名| grep" {"

1 个答案:

答案 0 :(得分:0)

尝试

$ sed 's/[{}]/&\n/' ip.txt
Hello, {
how} are you?
I am fine. }
Thanks{..
  • [{}]是一个匹配{}
  • 的字符类 替换部分中的
  • &将匹配
  • 的括号


仅在行中存在{}时替换

$ cat ip.txt
Hello, {how} are you?
fo{o
I am fine. }Thanks{..

$ sed '/{.*}\|}.*{/ s/[{}]/&\n/' ip.txt
Hello, {
how} are you?
fo{o
I am fine. }
Thanks{..
  • /{.*}\|}.*{/是符合条件的表达式,以匹配{后跟},反之亦然