sed:似乎无法匹配模式到行

时间:2013-12-09 18:36:03

标签: regex sed grep corruption

如果我有这样的sed脚本:

 35185222p

并按以下方式运行:

sed -n -f seddy.sed infile.xml

它正确地打印出我想修复的XML的狡猾线。

如果我将脚本更改为:

 35185222s@^.*$@<load address='11b38c56' size='08' />@p

它没有匹配(即没有输出)。我有什么问题?

好的:我想我现在得到了这个 - 遗憾的是原始文件中此行中的损坏意味着字符与.不匹配 - 所以我该如何解决?

进一步更新这是我剪切和粘贴时的样子:

  <load address='11c1�����ze='08' />

3 个答案:

答案 0 :(得分:1)

尝试使用sed c命令更改行的内容:

35185222c\<load address='11b38c56' size='08' />

我坦率地不知道为什么正则表达式^.*$在该行上不匹配。我的猜测是它与你的语言环境和字符编码有关,但似乎它必须是一个错误。

答案 1 :(得分:1)

真正的问题似乎是语言环境的冲突。

运行

LANG=c sed -f seddy.sed input.xml

解决了这个问题。当然,我本可以使用c命令。

答案 2 :(得分:0)

35185222s@[^].*[$]@<load address='11b38c56' size='08' />@p

^和$应该被转义,或者至少在[]之间,有意义(^ = begin,$ = end),并且在开始之前和结束之后都没有。

也可以使用',这取决于您的sed中的字符串分隔符,并且mybe也必须被escpaed