Как заменить одинарные кавычки другим символом в 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

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

Ответ 1

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

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

Ответ 2

Это сделает то, что вы хотите

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

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

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

НТН

Ответ 3

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

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

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

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

Ответ 4

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

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

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

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

но это сделало бы

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

Ответ 5

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

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

Ответ 6

Мне пришлось заменить строку "0x" на "32'h" и разрешить с помощью:

sed 's/ 0x/ 32\x27h/'