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
- 除非您需要 shell 的双引号来解释某些内容(例如扩展变量),否则在 shell 中的字符串(包括脚本)周围使用单引号而不是双引号,这样您就不必添加额外的转义并跳过其他环以避免 shell 解释脚本中的 chars/strings。
- 不要使用像
&
这样的元字符作为脚本分隔符,因为它充其量只会混淆您的脚本,使用始终是文字但不会出现在脚本中的字符,例如#
在这种情况下。
- 要在
'
分隔的 sed 脚本中包含 '
,请使用 '\''
或 \x27
。
- 在 40 多年的编程生涯中,我从未听说过“antislash”这个词。字符
\
的常用术语是反斜杠,而 /
是正斜杠。
- 要在字符串中按字面意义包含反斜杠,必须使用额外的前置反斜杠对其进行转义,即
\
而不仅仅是 \
.
$ 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
添加回去。
我想通过命令行将 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
- 除非您需要 shell 的双引号来解释某些内容(例如扩展变量),否则在 shell 中的字符串(包括脚本)周围使用单引号而不是双引号,这样您就不必添加额外的转义并跳过其他环以避免 shell 解释脚本中的 chars/strings。
- 不要使用像
&
这样的元字符作为脚本分隔符,因为它充其量只会混淆您的脚本,使用始终是文字但不会出现在脚本中的字符,例如#
在这种情况下。 - 要在
'
分隔的 sed 脚本中包含'
,请使用'\''
或\x27
。 - 在 40 多年的编程生涯中,我从未听说过“antislash”这个词。字符
\
的常用术语是反斜杠,而/
是正斜杠。 - 要在字符串中按字面意义包含反斜杠,必须使用额外的前置反斜杠对其进行转义,即
\
而不仅仅是\
.
$ 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
添加回去。