命令行使用Sed替换PHP文件中美式时间格式字符串为法式格式的转义问题求助
解决sed替换PHP中美式时间格式为法式格式的问题
你遇到的问题核心是源字符串里的特殊字符(反斜杠、单引号、空格)没有正确转义,再加上原sed命令缺少必要的替换语法结构,导致命令失效。下面给你两种可行的解决方案,以及详细的问题分析:
正确的替换命令
方案1:使用双引号包裹sed命令(适合快速编写)
sed -i "s|date('m/d/Y \\a\\t h:i:s A')|date('Le d/m/Y à G:i:s')|g" /path/file.php
方案2:使用单引号包裹sed命令(避免shell转义干扰,更可靠)
sed -i 's|date('\''m/d/Y \a\t h:i:s A'\'')|date('\''Le d/m/Y à G:i:s'\'')|g' /path/file.php
为什么原命令失效?
你的原命令有几个关键问题:
- 缺少替换命令的核心结构:sed的替换命令必须以
s开头(格式为s/搜索内容/替换内容/选项),你的命令没有s,sed无法识别这是替换操作。 - 分隔符混乱:你没有指定明确的分隔符,导致sed无法区分搜索内容、替换内容的边界。我们改用
|作为分隔符,避免和字符串里的/冲突,不用额外转义/。 - 反斜杠转义错误:源字符串里的
\a\t是sed的特殊转义序列,同时shell会解析双引号里的反斜杠——所以在双引号中,你需要用\\a\\t让shell传递给sed正确的\a\t;如果用单引号包裹,直接写\a\t即可,因为单引号会屏蔽shell的转义解析。 - 单引号处理不当:如果用单引号包裹sed脚本,里面的单引号需要用
'\''来转义(逻辑是:关闭当前单引号,输出一个转义的单引号,再重新开启单引号)。
额外提示
- 如果是在macOS上使用sed,
-i选项需要加一个空参数(比如-i ''),否则会生成备份文件:sed -i '' "s|date('m/d/Y \\a\\t h:i:s A')|date('Le d/m/Y à G:i:s')|g" /path/file.php - 可以先去掉
-i参数执行命令,预览替换效果,确认正确后再加上-i修改文件。
内容的提问来源于stack exchange,提问作者Fifi
相关产品推荐
相关产品推荐

