2013-06-28 17 views
12

Mam płaski plik, w którym mam wiele wystąpień ciągów zawierających pojedynczy cytat, np. hari's i leader's.Jak zamienić pojedyncze cudzysłowy na miejsce w sed?

chcę zastąpić wszystkie wystąpienia pojedynczego cytatem z miejsca, tj

  • wszystkich wystąpień hari's do hari s
  • wszystkich wystąpień leader's do leader s

Próbowałem

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

i

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

ale nie dają mi oczekiwanego rezultatu.

Odpowiedz

32

starać się utrzymać sed poleceń prosty jak najwięcej albo cię "Będę mylić się z tym, co napisałeś po przeczytaniu go później.

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

Również ... 'tr \ '' twalberg

9

Wystarczy przejść opuścić apostrof i położyć uciekł jeden cytat:

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

również możliwe przy zmiennej:

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

Dokładnie to, czego szukałem, dzięki. –

16

to zrobi to, co chcesz

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

Zastąpi on apostrofów obecne w dowolnym miejscu w pliku/tekstu. Nawet jeśli są one używane do cytowania, zostaną zastąpione spacjami. W takim przypadku (usunąć cytaty obrębie nie słowo w słowo granicy) można użyć następujących:

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

HTH

0

Tutaj jest na podstawie własnego doświadczenia.

Proszę zauważyć, w jaki sposób mogę użyć specjalnego char ' vs " po sed

nie będzie to zrobić (nie ma wyjścia)

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

ale to zrobi

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

Myślę, że trochę wyjaśnienia byłoby miłe. Ponadto: czy to naprawdę kwestia Solaris, czy coś innego? (Co jeszcze?) – Holger

0

The - powinienem zastąpić go w pliku sed -i 's/"/"/g' filename.txt

jeśli chcesz kopii zapasowych można zrobić sed -i.bak „s /„/ "/ g” nazwa_pliku.txt

Powiązane problemy