如何在两个特定字符之间插入新行

4

有没有办法在两个特定字符之间插入新行? 我想在文本文件中每次出现}{时插入一个新行,但是我希望这个新行被插入在两个花括号之间。 例如:}\n{


最好将翻译后的文本放在文件中,但是如果放在文件或标准输出中都可以。 - fep92
2个回答

8

您可以运行

sed -i -e 's/}{/}\n{/g' filename.ext

其中

  • sed 是您的流编辑器程序
  • -i 是选项,用于 直接在文件 filename.ext 中进行编辑
  • -e 表示以下是一个正则表达式
  • s/}{/}\n{/g 是正则表达式的意思,查找每一行中所有(g)的}{实例,并用}\n{替换它们,其中\n是新行的正则表达式。如果省略g,它将仅替换搜索模式的第一次出现,但仍然在每一行中。

要在提交更改到文件之前进行测试,请省略-i选项,它将在STDOUT中打印结果。

示例:

创建文件:

echo "First }{ Last" > repltest.txt

运行
sed -e 's/}{/}\n{/g' repltest.txt

将以下内容打印到标准输出(STDOUT):
First }
{ Last

要在同一文件中实现更改,请使用-i选项。

如果要针对标准输入而不是文件运行此命令,则省略-i和管道命令中输出标准输入的文件名,例如:

cat repltest.txt | sed -e 's/}{/}\n{/g'

这与sed -e 's/}{/}\n{/g' repltest.txt执行相同的操作。


在我的OS X和bash 5.0.2上没有起作用(它插入了一个“n”)。 - Joshua Cheek
1
最好的帮助。我在API Gateway中使用它来获取S3中的Amazon Access日志。我添加了一个额外的\n,这样更容易阅读和grep。谢谢! - Tony-Caffe

3
使用sed命令。
sed [-i] -e 's/}{/}\n{/g' file.txt

每个实例的}{都将被替换为}\n{。如果您想要替换文件中的文本,可以使用-i标记。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接