【发布时间】:2014-03-24 05:12:58
【问题描述】:
我想在不使用十六进制或八进制代码的情况下,使用 PHP shell_exec() 中的 sed 或 awk 将特定文本文档中的所有反引号 (´) 替换为单引号 (')。
起初,我尝试在 shell 脚本中运行这些命令:
sed -e 's/´/'"'"'/g' file.txt;
sed -e 's/\´/'"'"'/g' file.txt;
sed -e 's/´/'/g' file.txt;
sed -e 's/\´/'/g' file.txt;
sed -e 's/"´"/'"'"'/g' file.txt;
awk '{gsub(/\´/, "\'" ) }1' file.txt;
但这些都不起作用。
input.txt 文件示例:
abc´def´123`foo'456;
output.txt 文件示例:
abc'def'123`foo'456
使用从终端运行的 sed 命令,此解决方案有效:
echo "a´b´c;" | sed "s/´/'/g"
输出是:
a'b'c;
但从可执行文件 test.sh 运行它:
#!bin/bash
sed "s/´/'/g" input.txt > output.txt
作为命令执行的shell脚本
bash test.sh
它不起作用,并且 output.txt 文件的内容与 input.txt 文件的内容相同。
但是,使用正向刻度它可以工作,结果是
#!bin/bash
sed "s/\`/'/g" input.txt > output.txt
是带有内容的 output.txt 文件
abc´def´123'foo'456;
但是,当我尝试使用字符的十六进制或八进制表示用单引号替换反向刻度时,它就像一个魅力。
使用 sed:
input.txt - abc´def´123`foo'456;
command - sed 's/\xB4/'"'"'/g' input.txt > output.txt;
output.txt - abc'def'123`foo'456
使用 awk:
input.txt - abc´def´123`foo'456;
command - awk '{gsub(/\264/, "\047" )}1' input.txt > output.txt;
output.txt - abc'def'123`foo'456
问题是,我正在使用另一个脚本应用于文档,该脚本使用上述脚本替换每个十六进制或八进制代码及其文字表示。我可以用另一种方式来做,我只是好奇是否可以在不使用十六进制或八进制代码的情况下使用上述替换。
【问题讨论】: