如何使用sed命令在指定字符后添加换行符?
使用sed实现指定位置添加换行与缩进
你的需求完全可以用sed实现,先说说你之前命令无效的原因:你写的sed 's/{},/\n/' test.txt是要匹配{},这个子串,但你的输入里根本不存在这个组合,自然匹配不到,所以没效果。
针对你的输入字符串,这里给出两种场景的sed命令(对应输入里的双引号是"还是"):
场景1:输入字符串包含普通双引号
假设test.txt内容为:
{"foo" = "foovalue","bar" = "barvalue"}
执行以下GNU sed命令:
sed -e 's/{/{\n /' -e 's/","/",\n "/' -e 's/}/\n}/' test.txt
每一步的作用:
s/{/{\n /:把左大括号{替换成{+换行+两个空格,让第一个键值对换行并缩进s/","/",\n "/:把","替换成",+换行+两个空格+",实现每个键值对之间的换行缩进s/}/\n}/:把右大括号}替换成换行+},让右大括号单独占一行
执行后输出就是你要的格式:
{ "foo" = "foovalue", "bar" = "barvalue" }
场景2:输入字符串包含"转义字符
如果test.txt内容为:
{"foo" = "foovalue","bar" = "barvalue"}
只需把命令里的"替换成"即可:
sed -e 's/{/{\n /' -e 's/","/",\n "/' -e 's/}/\n}/' test.txt
执行后输出:
{ "foo" = "foovalue", "bar" = "barvalue" }
注意:如果是BSD sed(比如macOS自带的sed),直接用
\n可能不生效,需要换成\加换行,或者使用$'\\n'来表示换行符,比如把命令里的\n替换成$'\\n'。
内容的提问来源于stack exchange,提问作者Sat
相关产品推荐
相关产品推荐

