【问题标题】:Replace string with a slash character with sed [duplicate]用 sed 用斜杠字符替换字符串 [重复]
【发布时间】:2014-09-17 18:28:58
【问题描述】:

我有一个目录树,里面有几个文件。
我想在每个文件中将字符串 index.html 替换为字符 /
由于/ 是一个特殊字符,我该如何指示 linux "sed" 命令以便我可以更改目录下的所有文件?

谢谢!

【问题讨论】:

  • 模式的第一个字符决定分隔符; / 没有什么特别之处,它只是经常被视为分隔符。如果我需要在模式中使用 /,我喜欢使用 @。例如回声'a/index.html' | sed 's@index.html@/@g' 给出一个//
  • 另外,虽然可能不如 Nick 的建议那样可读,但可以以典型的 Unix 方式,使用 `: sed 's/index.html/\//g' 转义 / `

标签: sed


【解决方案1】:

Sed 通常与/ 一起使用作为分隔符。实际上你可以使用任何符号作为分隔符,sed 只是使用s 命令之后的第一个符号。例如sed 's|/|slash|'。或者你可以像sed s/\//slash/ 那样逃避/。这是一个危险的命令,小心,备份你的目录:

for file in `find /your/dir/ -type f`; do sed -i "$file" 's|index.html|/|g'; done

【讨论】:

  • 嘘,嘶嘶声。 Don't read lines with for -- 如果名称包含空格或可以解释为 glob 字符,这将严重失败。另请参阅BashPitfalls #1
  • find /your/dir/ -type f -exec sed -i -e 's|index.html|/|g' {} + 更安全(也更高效)
猜你喜欢
  • 2023-03-20
  • 2021-10-08
  • 2018-01-29
  • 1970-01-01
  • 2018-05-08
  • 2019-03-28
  • 1970-01-01
  • 2011-08-01
  • 2018-02-27
相关资源
最近更新 更多