【发布时间】:2021-10-01 03:49:10
【问题描述】:
我是shell脚本的新手,我有一个包含多条记录的文本文件,第一条记录结束和第二条记录在同一行开始,如下所示
"-}{"
所以我想打破链条
"-} #line1
{ #line2"
我尝试如下: 方法一
sed 's/\-\}\{//\-\} \n \{' file.txt
方法二
tr '-}{' '\n'
谁能帮我解决这个问题?
【问题讨论】:
我是shell脚本的新手,我有一个包含多条记录的文本文件,第一条记录结束和第二条记录在同一行开始,如下所示
"-}{"
所以我想打破链条
"-} #line1
{ #line2"
我尝试如下: 方法一
sed 's/\-\}\{//\-\} \n \{' file.txt
方法二
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/-}\({.*\(.\)\)/-}\2\1/;ta;s/.$//' file
在当前行添加一个换行符。
使用模式匹配在-} 和{ 之间重复插入换行符。
全部完成后,删除引入的换行符。
【讨论】:
s/-}{/-} \n {/g'?
您可以使用() 捕获分隔符并执行以下操作:
echo '"-}{" -} -}{' | sed -E 's/(-})({)/\1\n\2/g'
"-}
{" -} -}
{
【讨论】: