Próbuję zastąpić wiele słów w pliku za pomocą sed -i #expression1 #expression2
plik
Something 123 item1
Something 456 item2
Something 768 item3
Something 353 item4
Wyjście (pożądane)
anything 123 stuff1
anything 456 stuff2
anything 768 stuff3
anything 353 stuff4
Wypróbowania
Mogę uzyskać następujące dane wyjściowe za pomocą sed -i
2 razy.
sed -i 's/Some/any/g' file
sed -i 's/item/stuff/g' file
Czy mogę w jakikolwiek sposób uczynić to pojedynczym poleceniem w miejscu, takim jak
sed -i 's/Some/any/g' -i 's/item/stuff/g' file
Kiedy wypróbowałem powyższy kod, trwa on s/item/stuff/g
jako plik i próbuję nad nim pracować.
shell
shell-script
text-processing
sed
JigarGandhi
źródło
źródło
sed - i 's/Some\(.*\)item/any\1stuff/' file
Odpowiedzi:
W zależności od wersji
sed
twojego systemu możesz to zrobićNie potrzebujesz tutaj
g
po ostatnim ukośniku ws
poleceniu, ponieważ wykonujesz tylko jedną zamianę w wierszu.Alternatywnie:
-i
Opcja mówised
do edytowania plików w miejscu; jeśli istnieją znaki natychmiast po-i
czymsed
wykonuje kopię zapasową oryginalnego pliku i wykorzystuje te znaki jako rozszerzenie pliku kopii zapasowej użytkownika. Na przykład,lub
zmodyfikuje
file
, zapisując oryginał wfile.bak
.Oczywiście w systemie uniksowym (lub uniksopodobnym) zwykle używamy „~” zamiast „.bak”, więc
źródło
-i
. Więcsed -i '' 's/a/b/;s/c/d/' file
albosed -i .back 's/a/b/;s/c/d/'
czysed -i.back 's/a/b/;s/c/d/'
nie. Innesed
implementacje zazwyczaj nie obsługują-i
.-i
rozszerzeniem a rozszerzeniem.sed -i 's/$username = "root"/$username = "newuser"/; s/$password = "password"/$password = "passwd"/; s/$dbname="handicraftstore"/$dbname="handicraft"' Web/database.php
wynikised: -e expression #1, char 141: unterminated
s 'command`s
polecenie nie ma ostatecznego/
.Możesz łączyć wyrażenia sed razem z „;”
źródło
Wiele wyrażeń za pomocą wielu
-e
opcji:lub możesz użyć tylko jednego:
Powinieneś podać rozszerzenie pliku kopii zapasowej, ponieważ kiedy niektóre implementacje
sed
, takie jak OSX sed , nie działają z pustym rozszerzeniem (musisz użyć,sed -i ''
aby zastąpić oryginalne pliki).źródło
Możesz używać Vima w trybie Ex:
%
wybierz wszystkie linies
zastąpićx
Zapisz i zamknijźródło