【发布时间】:2016-03-10 06:16:49
【问题描述】:
我的文件有这样的记录
Nitin "Nick" Patel
我想用两个单引号代替双引号:
Nitin ''Nick'' Patel
我试过命令
sed -i "s/\Nitin "Nick" Patel/Nitin ''Nick''Patel/g" test1.csv
但不幸的是,它并没有取代任何东西。 请指教。
【问题讨论】:
我的文件有这样的记录
Nitin "Nick" Patel
我想用两个单引号代替双引号:
Nitin ''Nick'' Patel
我试过命令
sed -i "s/\Nitin "Nick" Patel/Nitin ''Nick''Patel/g" test1.csv
但不幸的是,它并没有取代任何东西。 请指教。
【问题讨论】:
sed "s/\"/''/g" File
Nitin ''Nick'' Patel
或者(根据具体要求,前一个将用 2 个' 替换所有"):
sed "s/Nitin \"Nick\" Patel/Nitin ''Nick'' Patel/g" File
Nitin ''Nick'' Patel
【讨论】:
在命令行中混合使用单引号和双引号需要小心。这可能就是你被要求这样做的原因。使用你的命令行:
sed -i "s/\Nitin "Nick" Patel/Nitin ''Nick''Patel/g" test1.csv
shell 实际上删除了嵌入的双引号(实际上sed 没有看到任何双引号)——就好像你写的那样:
sed -i "s/\Nitin Nick Patel/Nitin ''Nick''Patel/g" test1.csv
我也不确定你为什么在搜索字符串中 Nitin 的 N 之前加上反斜杠。
有多种方法可以进行必要的替换,包括:
sed -i.bak "s/Nitin \"Nick\" Patel/Nitin ''Nick'' Patel/g" test1.csv
sed -i.bak 's/Nitin "Nick" Patel/Nitin '\'\''Nick'\'\'' Patel/g' test1.csv
sed -i.bak -f script.sed test1.csv
其中script.sed 包含:
s/Nitin "Nick" Patel/Nitin ''Nick'' Patel/g
【讨论】:
大家可以试试:
sed -i "s/\x22/\x27\x27/g" test1.csv
【讨论】:
\x27\x27 将一个双引号替换为两个单引号?它是否还编辑He said, "Don't!" 使其变为He said, 'Don't!' 或He said, ''Don't!'',而样本仅明确处理Nitin "Nick" Patel?