gpt4 book ai didi

linux - 如何替换括号之间的换行符

转载 作者:行者123 更新时间:2023-12-02 01:57:28 24 4
gpt4 key购买 nike

我有类似于此格式的日志文件

test {
seq-cont {
0,
67,
266
},
grp-id 505
}
}
test{
test1{
val
}
}

这是产生该输出的 echo 命令

$ echo -e "test {\nseq-cont {\n\t\t\t0,\n\t\t\t67,\n\t\t\t266\n\t\t\t},\n\t\tgrp-id 505\n\t}\n}\ntest{\n\ttest1{\n\t\tval\n\t}\n}\n"

问题是如何删除 seq-cont { 和文件中可能存在多个的下一个 } 之间的所有空格。

我希望输出是这样的。最好使用 sed 来生成输出。

test{seq-cont{0,67,266},
grp-id 505
}
}
test{
test1{
val
}
}

OP 的努力:这是有点有效但不完全是我想要的:

sed ':a;N;/{/s/[[:space:]]\+//;/}/s/}/}/;ta;P;D' logfile

最佳答案

可以使用 gnu-awk 以及匹配 { 并关闭 } 的自定义 RS 正则表达式来完成:

awk -v RS='{[^}]+}' 'NR==1 {gsub(/[[:space:]]+/, "", RT)} {ORS=RT} 1' file

test {seq-cont{0,67,266},
grp-id 505
}
}
test{
test1{
val
}
}

这里:

  • NR==1 {gsub(/[[:space:]]+/, "", RT)}:对于第一条记录,将所有空格(包括换行符)替换为空字符串.
  • {ORS=RT}:将 ORS 设置为我们在 RS 中捕获的任何文本

PS:如果您想对整个文件执行此操作,请删除 NR==1

关于linux - 如何替换括号之间的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69459615/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com