簡體   English   中英

使用sed或awk用單引號替換反引號

[英]Replace backtick with single quote using sed or awk

我想,以取代所有的反引號( ´ )用單引號( ' PHP了shell_exec(),而不使用十六進制或八進制代碼使用awk或者sed內)在特定的文本文檔。

首先,我嘗試在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

我不知道從php調用腳本,但你只是嘗試:

sed "s/´/'/g" file.txt

看:

$ echo "a´b" | sed "s/´/'/g"
a'b

我認為你使用的是錯誤的勾號,因為你說的有效的解決方案正在替換你在問題中要求替換的一個不同的刻度(向前刻度與向后刻度)。 如果是這樣,那么你將需要逃避反擊:

sed "s/\`/'/g" file.txt 

$ echo "a\`b" | sed "s/\`/'/g"
a'b

你在php里面調用shell函數是什么? phpstr_replace函數,可以為你做這個工作。

<?php
echo str_replace("`","'","He`lo w`rld!");
?>

你可以使用Bash:

while read line; do
    echo ${line//\´/\'}
done < file.txt

這可能適合你(GNU sed):

sed 'y/`/'\''/' file

嘗試這個:

sed "s/\`/'/" file.txt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM