2011-07-01 11 views
18

Oto, co próbowałem: sed -i 's/^.*/"$&"/' myFile.txtJak zawrzeć każdy wiersz w pliku w podwójnym cudzysłowie z sed?

Umieścił $ na początku każdej linii.

+0

Czy próbowałeś usunąć ampersand? –

+0

Przepraszam, chcę powiedzieć, że wstawiłem $ na początku każdej linii. Edytowane. Bez wzmacniacza nic nie działa, –

+0

oba działają dobrze tutaj. Nie mam pojęcia, jakiego rodzaju sed używasz –

Odpowiedz

22

tutaj jest

sed 's/\(.*\)/"\1"/g' 
+0

hmm, ten wydaje się nie mieć żadnego efektu. –

+0

Czy muszę uciec podwójne cytaty w PowerShell lub coś? –

+0

Działa świetnie na OS X Yosemite. – funroll

4

Prawie miał rację. Spróbuj tego lekko zmodyfikowaną wersję:

sed 's/^.*$/"&"/g' file.txt 
10

krótszy

sed 's/.*/"&"/' 

bez spacji

sed 's/ *\(.*\) *$/"\1"/' 

pominąć pustych linii

sed '/^ *$/d;s/.*/"&"/' 
2

Można też zrobić to bez grupy przechwytywania:

sed 's/^\|$/"/g' 

"^" dopasowuje początek linii, a "$" pasuje do końca linii.

| to "Alternacja", to po prostu "LUB". Trzeba tu uciekać [1], więc po angielsku ^\|$ oznacza "początek lub koniec linii".

"Zastąpienie" tych znaków jest w porządku, po prostu dołącza tekst do początku na końcu, więc możemy zastąpić " i dodać na końcu końcówkę g, aby wyszukiwanie globalne było dopasowane jednocześnie.

[1] Niestety, okazuje się, że | nie jest częścią "podstawowych wyrażeń regularnych POSIX", ale jest częścią "ulepszonej" funkcjonalności, którą można skompilować z flagą REG_ENHANCED, ale nie jest domyślnie w systemie OSX, więc jesteś bezpieczniejszy dzięki odpowiedniej podstawowej grupie przechwytywania, takiej jak s/^\(.*\)$/"\1"/

Skromne ciasto dla mnie dzisiaj.

+0

Jeśli rozumiesz magię sed, czy możesz wyjaśnić, co tak naprawdę robi? – funroll

+1

Próbowałem wszystkich odpowiedzi wymienionych powyżej, nic nie działa dla mnie, ale ta sztuczka ma! Dzięki. – ASten

Powiązane problemy