在Bash中用双引号替换单引号

时间:2016-04-28 20:10:22

标签: bash

我有一个充满SAS标签文件的目录。

标签文件在每个文件中都有空格,单引号,空格,单引号:

file_put_contents("../img/name.jpg", file_get_contents($im));

我想要一个bash脚本,用双引号替换这些单引号,以便最终得到:

VAR1 = ' 'SOME LABEL' ' 

我该怎么做?

3 个答案:

答案 0 :(得分:1)

假设我们有这个测试文件:

$ cat file
VAR1 = ' 'SOME LABEL' ' 

要将sinqle-quote-space-single-quote替换为双引号,我们可以使用sed:

$ sed "s/' '/\"/g" file
VAR1 = "SOME LABEL" 

如果以上产生了您想要的输出,那么您可能想要就地更改文件。这可以使用:

完成
sed -i "s/' '/\"/g" file  # linux
sed -i "" "s/' '/\"/g" file  # BSD/OSX

要替换当前目录中的所有文件:

sed -i "s/' '/\"/g" *  # linux
sed -i "" "s/' '/\"/g" *  # BSD/OSX

实施例

$ cat file
VAR1 = ' 'SOME LABEL' '
$ sed -i "s/' '/\"/g" *  # linux
$ cat file
VAR1 = "SOME LABEL" 

答案 1 :(得分:0)

我会尝试像

这样的东西
for f in *
do
    sed "s/' '/\"/g" "$f" > "$f".new && mv "$f".new "$f"
done

(但是像这样批量编辑文件可能会有风险,所以请在尝试之前备份文件!)

答案 2 :(得分:0)

示例:

> cat t.sas
variable="vol1"
variable2="vol3"

sed -i '' "s/\"\(.*\)\"/\'\1\'/" *.sas

这样做是搜索匹配 .sas的目录中的所有文件,然后在每个文件中搜索正则表达式“”,然后在插入标识的测试时将“”替换为“” sed命令的右侧。

结果:

> cat t.sas
variable='vol1'
variable2='vol3' 

...因而

sed -i '' "s/\'\(.*\)\'/\"\1\"/" *.sas

> cat t.sas
variable="vol1"
variable2="vol3"