regex - 使用 Sed 将输入解析为包含在花括号中的 block

标签 regex awk sed

两个文件:

文件 1

{
foo
}
{
bar
}

文件 2

foo
}
{
bar
}

(唯一不同的是文件 1 以左大括号开头)

下面的表达式对文件 2 有效,但对文件 1 无效,为什么? (以及如何修复?):

sed '1!N; s/}\n{/},\n{/' < file1 or file2

我不知道为什么匹配前 2 行的左大括号会导致此行为。我想知道 sed 被绊倒的原因以及如何修复它。但除了 sed 之外,我也愿意接受在 }\n{ 之间插入 , 的其他方法。

最佳答案

这是你想要的吗(使用 GNU awk 进行多字符 RS):

$ awk -v RS='}\n{' '{ORS=(RT?"},\n{":"")} 1' file1
{
foo
},
{
bar
}

$ awk -v RS='}\n{' '{ORS=(RT?"},\n{":"")} 1' file2
foo
},
{
bar
}

关于regex - 使用 Sed 将输入解析为包含在花括号中的 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33161423/

相关文章:

Python 正则表达式 : excluding square brackets and the text inside

bash - 如何将多行合并为单行但仅适用于由空行分隔的行 block

windows - sed 或 awk - 需要获取子字符串并将其附加到行尾

linux - 关于递归文件运行和替换输入文件的主要内容

regex - 紧跟在关键字之后选择单词

regex - Hadoop pig : Extract all substrings matching a given regular expression

python - 如何将列中的整数替换为另一个文件、python 或 awk 中包含的另一个整数

linux - Bash 脚本 - 需要从目录中删除文件,直到目录大小小于 8 TB

bash - 如何将base64编码的内容传递给sed?

regex - 如何使用 egrep 用逗号和数字搜索特定模式