小编Mat*_*sík的帖子

使用sed或awk用单引号替换反引号

我想使用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;
Run Code Online (Sandbox Code Playgroud)

但是这些都不起作用。

input.txt文件示例:

abc´def´123`foo'456;
Run Code Online (Sandbox Code Playgroud)

output.txt文件的示例:

abc'def'123`foo'456
Run Code Online (Sandbox Code Playgroud)

使用从终端运行的sed命令,此解决方案有效:

echo "a´b´c;" | sed "s/´/'/g"
Run Code Online (Sandbox Code Playgroud)

输出为:

a'b'c;
Run Code Online (Sandbox Code Playgroud)

但是从可执行文件test.sh运行它:

#!bin/bash
sed "s/´/'/g" input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)

作为命令执行的shell脚本

bash test.sh
Run Code Online (Sandbox Code Playgroud)

它不起作用,并且output.txt文件的内容与input.txt文件的内容相同。

但是,使用正向勾号,它的工作原理和结果

#!bin/bash
sed "s/\`/'/g" input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)

是带有内容的output.txt文件

abc´def´123'foo'456;
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用字符的十六进制或八进制表示形式将单引号替换为后引号时,它就像一个超级字符。

使用sed:

input.txt  - abc´def´123`foo'456;
command    - sed 's/\xB4/'"'"'/g' input.txt > output.txt;
output.txt - …
Run Code Online (Sandbox Code Playgroud)

php regex bash awk sed

3
推荐指数
1
解决办法
4027
查看次数

标签 统计

awk ×1

bash ×1

php ×1

regex ×1

sed ×1