使用花括号或循环时,使用sed有额外的字符错误

Eva*_*van 6 regex unix windows cmd sed

我目前正在编写一个批处理脚本来读取和修改Windows中的一些配置文件.值得庆幸的是,我可以访问说,因此我可以将其用于我必须做的大部分工作,尽管由于环境有些怪癖.

我想要执行的声明是:

sed '/\[$/{:loop N /^^]/!b loop} s/\n//g'
Run Code Online (Sandbox Code Playgroud)

从理论上讲,这应该删除带方括号的行之间的行上的任何换行符.我在这里使用双重插入来逃避并使用第二个(一个怪癖cmd.exe).但是它失败并出现以下错误:

sed: -e expression #1, char 15: extra characters after command
Run Code Online (Sandbox Code Playgroud)

在测试其他一些陈述时,我得到了以下结果.

sed '/\[/{ s/.*//g }' - 完全按照预期执行

sed '/\[/{ N } s/.*//g' - 失败了 sed: -e expression #1, char 11: extra characters after command

sed 's/^^ */^&\n/ :loop s/.*/asdf/ b loop'- 失败了sed: -e expression #1, char 12: unknown option tos'`

我只是不确定我的主要陈述中的错误是由于我搞砸了语法,还是因为我只是因为我在Windows中.你能提供的任何想法或帮助都会很精彩.

Sie*_*geX 7

sed '/\[$/{:loop; N;/]$/!b loop}; s/\n//g'

你需要在你的陈述之间放置分号.此外,我使用'$'锚而不是'^',因为你永远不会匹配'/ ^] /',因为你的'N'命令改变模式空间以在'['之前有东西.请记住,'/ /'匹配模式空间,而不是当前输入行.

测试

$ echo -e 'A\n[\nfoo\nbar\nbaz\n]\nB' | sed '/\[$/{:loop; N;/]$/!b loop}; s/\n//g'
A
[foobarbaz]
B
Run Code Online (Sandbox Code Playgroud)