it-roy-ru.com

Как заменить одинарные кавычки другим символом в sed?

У меня есть плоский файл, где у меня есть несколько вхождений строк, который содержит одинарные кавычки, например, hari's и leader's.

Я хочу заменить все вхождения одинарной кавычки пробелом, т.е. 

  • все случаи от hari's до hari s
  • все случаи от leader's до leader s

Я старался

sed -e 's/"'"/ /g' myfile.txt

а также

sed -e 's/"'"/" "/g' myfile.txt

но они не дают мне ожидаемого результата.

19
Srihari

Постарайтесь, чтобы команды sed были максимально простыми, иначе вы запутаетесь в том, что написали, прочитав его позже.

#!/bin/bash
sed "s/'/ /g" myfile.txt
42
Antarus

Это будет делать то, что вы хотите

echo "hari's"| sed 's/\x27/ /g'

Он заменит одинарные кавычки в любом месте вашего файла/текста. Даже если они используются для цитирования, они будут заменены пробелами. В этом случае (удалите кавычки в пределах Word, а не на границе Word), вы можете использовать следующее:

echo "hari's"| sed -re 's/(\<.+)\x27(.+\>)/\1 \2/g'

НТН

20
n3rV3

Просто оставьте одиночную кавычку и вставьте экранированную одинарную кавычку:

sed 's/'\''/ /g' input

также возможно с переменной:

quote=\'
sed "s/$quote/ /g" input
11
perreal

Здесь основан на моем собственном опыте.

Обратите внимание, как я использую специальный символ ' vs " после sed

Это не будет делать (без вывода)

2521 #> echo 1'2'3'4'5 | sed 's/'/ /g'
>
>
>

но это будет делать

2520 #> echo 1'2'3'4'5 | sed "s/'/ /g"
12345
1
Dedy K Wijaya

-I должен заменить его в файле sed -i 's/“/"/g' filename.txt

если вы хотите резервное копирование, вы можете сделать sed -i.bak 's/“/"/g' filename.txt

0
Jonni2016aa