Awk 替换两个单词之间的换行符
我有一个文本文件的输出,如下所示。我想把someItems数组的所有内容放在一行下面。因此,每一行都有一个新的someItems数组的内容。例如:Awk 替换两个单词之间的换行符,awk,Awk,我有一个文本文件的输出,如下所示。我想把someItems数组的所有内容放在一行下面。因此,每一行都有一个新的someItems数组的内容。例如: "someItems": [ { "someId": "MountSomers-showtime.com-ETTI0000000000000003-1452005472058", "source": "MountSomers", "sourceAssetId": "9", "title": "Pk_3", "ppp": "12",
"someItems": [
{
"someId": "MountSomers-showtime.com-ETTI0000000000000003-1452005472058",
"source": "MountSomers",
"sourceAssetId": "9",
"title": "Pk_3",
"ppp": "12",
"expirationDate": "2016-01-06T14:51:12Z"
}, {
"someId": "MountSomers-ericsson.com- ETTI0000000000000005-1452005472058",
"source": "MountSomers",
"sourceAssetId": "12",
"title": "Pk_5",
"ppp": "12",
"expirationDate": "2016-01-06T14:51:12Z"
} ]
"someItems": [
{
"someId": "MountSomers-hbo.com-ETTI0000000000000002-1452005472058",
"source": "MountSomers",
"sourceAssetId": "7",
"title": "Pk_2",
"ppp": "12",
"expirationDate": "2016-01-06T14:51:12Z"
}, {
"someId": "MountSomers-showtime.com-ETTI0000000000000003-1452005472058",
"source": "MountSomers",
"sourceAssetId": "9",
"title": "Pk_3",
"ppp": "12",
"expirationDate": "2016-01-06T14:51:12Z"
}, {
"someId": "MountSomers-ericsson.com-ETTI0000000000000005-1452005472058",
"source": "MountSomers",
"sourceAssetId": "12",
"title": "Pk_5",
"ppp": "12",
"expirationDate": "2016-01-06T14:51:12Z"
} ]
将成为
"someItems": [ ..... ]
"someItems": [ ..... ]
我有下面的
cat file | | awk '/^"someItems": [/{p=1}/^]/{p=0} {if(p)printf "%s",$0;else printf "%s%s\n",(NR==1?"":RS),$0}'
但它不符合我的要求 由于输入仅在外部级别包含方括号,因此解决方案非常简单:
awk '{gsub("\n","", $0)}1' RS=']\n' file
我正在使用]\n
作为输入记录分隔符。这将为您提供“someItems:…”
之间的整个部分,直到关闭]
为止,作为$0
gsub()
只是替换换行符<代码>1打印(修改的)记录
您还可以使用
sed
:
sed '/\[/{:a;N;/]/!ba;s/\n//g}' file
我将在多行版本中对此进行解释:
script.sed:
#地址。匹配包含洞口的行[
/\[/{#块的开始
#定义标签“a”
:a
#读取新行并将其附加到模式缓冲区
N
#如果模式缓冲区不包含结束符]
#跳回标签“a”
/]/!巴
#出现右括号后,请更换所有换行符
#因为在这种情况下我们不会跳回“a”,这意味着我们将
#离开区块,开始新的循环。
s/\n//g
}#块端
打印不带尾随换行符的每一行。从第二个匹配项开始,在每个
“someItems”
之前放置一个前导换行符。在结尾处打印一条换行符以保持优雅。awk解决方案简单明了+1.
$ awk '/^"someItems":/ && f { printf "\n" } { printf $0; f=1 } END { printf "\n" }' file.txt
"someItems": [{ "someId": "MountSomers-showtime.com-ETTI0000000000000003-1452005472058", "source": "MountSomers", "sourceAssetId": "9", "title": "Pk_3", "ppp": "12", "expirationDate": "2016-01-06T14:51:12Z"}, { "someId": "MountSomers-ericsson.com- ETTI0000000000000005-1452005472058", "source": "MountSomers", "sourceAssetId": "12", "title": "Pk_5", "ppp": "12", "expirationDate": "2016-01-06T14:51:12Z"} ]
"someItems": [{ "someId": "MountSomers-hbo.com-ETTI0000000000000002-1452005472058", "source": "MountSomers", "sourceAssetId": "7", "title": "Pk_2", "ppp": "12", "expirationDate": "2016-01-06T14:51:12Z"}, { "someId": "MountSomers-showtime.com-ETTI0000000000000003-1452005472058", "source": "MountSomers", "sourceAssetId": "9", "title": "Pk_3", "ppp": "12", "expirationDate": "2016-01-06T14:51:12Z"}, { "someId": "MountSomers-ericsson.com-ETTI0000000000000005-1452005472058", "source": "MountSomers", "sourceAssetId": "12", "title": "Pk_5", "ppp": "12", "expirationDate": "2016-01-06T14:51:12Z"} ]
$