sed -i 用反斜杠替换字符串

Sed -i replace string with anti-slash

我想通过命令行将 PHP 文件中的美国时间替换为法国时间。

date('m/d/Y \a\t h:i:s A'date('Le d/m/Y à G:i:s'

我尝试了以下 sed 命令:

sed -i "date('m/d/Y \a\t h:i:s A'&date('Le d/m/Y à G:i:s'&g" /path/file.php

没用。我认为问题出在源字符串 \a\t

中的反斜杠

我已经检查过这个问题:

我已经尝试使用 \ 更改分隔符或转义反斜杠。

但没有任何效果。欢迎任何帮助。

像这样转义反斜杠:

sed -i "date('m/d/Y \\a\\t h:i:s A'&date('Le d/m/Y à G:i:s'&g" /path/file.php
  1. 除非您需要 shell 的双引号来解释某些内容(例如扩展变量),否则在 shell 中的字符串(包括脚本)周围使用单引号而不是双引号,这样您就不必添加额外的转义并跳过其他环以避免 shell 解释脚本中的 chars/strings。
  2. 不要使用像 & 这样的元字符作为脚本分隔符,因为它充其量只会混淆您的脚本,使用始终是文字但不会出现在脚本中的字符,例如# 在这种情况下。
  3. 要在 ' 分隔的 sed 脚本中包含 ',请使用 '\''\x27
  4. 在 40 多年的编程生涯中,我从未听说过“antislash”这个词。字符 \ 的常用术语是反斜杠,而 / 是正斜杠。
  5. 要在字符串中按字面意义包含反斜杠,必须使用额外的前置反斜杠对其进行转义,即 \ 而不仅仅是 \.
$ cat file
foo date('m/d/Y \a\t h:i:s A' bar

$ sed 's#date('\''m/d/Y \a\t h:i:s A'\''#date('\''Le d/m/Y à G:i:s'\''#g' file
foo date('Le d/m/Y à G:i:s' bar

$ sed 's#date(\x27m/d/Y \a\t h:i:s A\x27#date(\x27Le d/m/Y à G:i:s\x27#g' file
foo date('Le d/m/Y à G:i:s' bar

当您测试它可以满足您的要求时,将 -i 添加回去。