【问题标题】:How to insert a new line between 2 specific characters on the same line?如何在同一行的 2 个特定字符之间插入新行?
【发布时间】:2017-12-08 13:58:47
【问题描述】:

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

这是一个例子:

之前:

你好,你好吗?

我很好。 }谢谢{..

之后:

你好,{

你好吗?

我很好。 }

谢谢{..

(或)

你好,{怎么样

}你是吗?

我很好。 }谢谢

{..

我尝试了下面的命令,但即使文件中的行有一个大括号,它也会添加新行,我只想在有两个括号时添加新行:

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

(或)

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

【问题讨论】:

    标签: bash shell powershell sed grep


    【解决方案1】:

    试试

    $ 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{..
    
    • /{.*}\|}.*{/ 是匹配 { 后跟 } 的限定表达式,反之亦然

    【讨论】:

    • 我试图排除一些字符串以及上述问题。现在,如果 line 包含 '{ or }' 或 "{ or }" 它应该跳过该行并且不在该行的任何位置放置新行。我使用了下面的 sed 命令,但它也没有按预期工作。希望您能在这里提供帮助,很抱歉再次询问,因为我对 sed 很陌生: sed -i "/({\'\|\'{)/n; /{.*}\|}.*{/ s/ [{}]/&\n/" 文件名
    • 尝试sed '/{ or }/b; /{.*}\|}.*{/ s/[{}]/&\n/'.. 如果行匹配/{ or }/ b 命令将跳过剩余代码并开始处理下一行...当您遇到此类问题时提出一个新问题.. . 不过我也建议先学习sed,学习资源见stackoverflow.com/tags/sed/info
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    相关资源
    最近更新 更多