我想在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
问题是,我正在使用另一个脚本,该脚本具有上述脚本,该脚本用其文字表示形式替换了每个十六进制或八进制代码。我可以用另一种方式做到这一点,我很好奇是否可以在不使用十六进制或八进制代码的情况下使用上述替换项。
您可以使用tr
适当的引用:
s='abc´def´123´foo'
tr '´' "'" <<< "$s"
abc'def'123'foo
tr
在文件上运行:
tr '´' "'" < file
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句