windows - 使用大括号或循环时 sed 出现额外字符错误

标签 windows regex unix sed cmd

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

我要执行的语句是:

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

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

sed: -e expression #1, char 15: extra characters after command

在测试其他一些语句时,我得到了以下结果。

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:s'`

的未知选项

我只是不确定我的主语句的错误是由于我搞砸了语法,还是只是因为我在 Windows 中。如果您能提供任何想法或帮助,那就太好了。

最佳答案

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

您需要在语句之间放置分号。另外,我使用了“$” anchor 而不是“^”,因为你永远不会匹配“/^]/”,因为你的“N”命令改变了模式空间以在“[”之前有东西。请记住,'//' 匹配模式空间,而不是当前输入行。

测试

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

关于windows - 使用大括号或循环时 sed 出现额外字符错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4259271/

相关文章:

windows - 如何在普通的 lisp/cffi 中使用 Windows HANDLE 调用 native c 函数

php - 允许 PHP date() 函数识别 dd-mm-yy 格式

Java改变系统换行符

windows - 有没有办法从 Windows 批处理文件启动对话框?

c# - 在 WinForms 中调整单个控件的大小

ruby - 如何使用 ruby​​ 有效地获取单词频率?

javascript - 如何从字符串中提取可变子字符串

linux - 如何使用 Python(独立于操作系统)获取 pid 列表和 PID 信息?

c - 使用 ualarm 的问题

Windows 批处理脚本将 run_dt=1/3/2015 拆分为 "/"