Unix中的模式转换



我是shell脚本的新手,我有一个包含多个记录的文本文件,第一个记录结束和第二个记录开始在同一行

"-}{"

所以我想用

来打破这个链
"-} #line1
{ #line2"

我尝试如下:方法1

sed 's/-}{//-} n {' file.txt
方法2

tr '-}{' 'n'
有谁能帮我一下吗?

使用您显示的示例,请尝试以下awk代码。只需将-}{替换为-}新行{并打印值。

echo '"-}{"' | awk '{sub(/-}{/,"-}n{")} 1'

转义太多

也是s/<pattern>/<replacement>/。有3个/,最后一个在最后。

$ echo '"-}{"' | sed 's/-}{/-} n {/'
"-} 
 {"

这是不可能与tr, tr是为单个字符翻译。如果您想要tr -- '-}{' 'n',那么tr将用换行符替换-, }{中的任何一个。

这可能适合您(GNU sed):

sed 'G;:a;s/-}({.*(.))/-}21/;ta;s/.$//' file

在当前行后面加一个换行符。

使用模式匹配在-}{之间重复插入换行符。

当所有操作完成后,删除引入的换行符。

您可以使用()捕获分隔符,并执行以下操作:

echo '"-}{" -}       -}{' | sed -E 's/(-})({)/1n2/g'
"-}
{" -}       -}
{

最新更新