【问题标题】:About replacing string with sed关于用 sed 替换字符串
【发布时间】:2011-12-20 02:09:40
【问题描述】:

我想将文档中的所有 \r\n 替换为 ,我正在尝试这个,请参阅下面的脚本

# sed -i 's/\r\n/<br/>' ~/xxd/*

但是我得到了这个错误

sed: -e expression #1, char 12: `s' 的未知选项

我该如何解决这个问题?

谢谢!

【问题讨论】:

标签: sed


【解决方案1】:

您的问题是您的替换字符串中有/ 分隔符,因此sed 假设这是您的替换结束,并且它后面的&gt; 是一个标志。

如果您的 sed 足够现代,只需使用不同的分隔符,即替换字符串中的 not

pax$ echo hello | sed -e 's/e/<br />/'
sed: -e expression #1, char 9: unknown option to `s'

pax$ echo hello | sed -e 's?e?<br />?'
h<br />llo

或者,您可以转义有问题的字符,但我尽量避免这种情况,因为它往往会导致过度锯齿 sed 命令,如 /\/\/\/\/\/\

您可能需要注意的另一件事是尝试在您的正则表达式中使用\n,因为sed 无论如何都是在线操作的。如果您的意图只是去除回车并插入 HTML 换行符,那么下面的 sed 命令可能会更好:

s?\r$?<br />?

【讨论】:

  • 感谢您的回复。但是输出似乎错误 # echo test\r\ntest | sed -e 's?\r$?
    ?' testrntest
  • @xxd:那是因为 shell 正在解释这些转义,如果您只使用 echo test\r\ntest 就可以看出这一点。如果您不希望 shell 修改它们,则需要单引号引用该参数。您可能还需要echo -e 来解释转义而不是将它们作为字符backslashrbackslashn 传递。
  • 不确定我做错了什么,但我似乎无法从我的角度让它工作。尝试在 cygwin 和 RHEL5 中对其进行测试,但无法使其正常工作。但是,我找到了一个替代方案:sed 's|$|&lt;br /&gt;|g' file.html。我想我会用&lt;br /&gt; 替换结束字符,确实有效!
猜你喜欢
  • 2020-07-28
  • 2020-03-13
  • 2012-12-21
  • 2021-03-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
相关资源
最近更新 更多