Czy sed może zapisać dane wyjściowe w pliku?


33

> mogę to zrobić.

echo "text" > file

tee mogę to zrobić.

echo "test" | tee file 

Czy sedmożna to zrobić bez użycia jednego z powyższych? Czy to możliwe, aby zapisać dane wyjściowe sedpolecenia do pliku bez użycia albo >albo tee?


Spróbuj znaleźć odpowiedź samodzielnie przed opublikowaniem tutaj pytań. Pierwszą rzeczą, o którą prosimy naszych użytkowników, jest wyszukiwanie i badanie przed opublikowaniem. Wszystko, co musiałeś zrobić sed '' file > newfile, to zobaczyłbyś, że >tak naprawdę można go używać sedz każdym innym programem.
terdon

1
Nadal używa >operatora. Byłem zainteresowany, czy zamiast tego można użyć komendy sed. Ale usunę to pytanie, jeśli jest tak złe.
Folatt

Ah, tak. OK, to zupełnie inne pytanie. Ponieważ zaakceptowałeś sed -iodpowiedź, zmienię twoje pytanie i wyjaśnię, czego szukasz.
terdon

Zaakceptowałem „ sed nie jest przeznaczone do przekierowywania danych jako teei >(mają) być”.
Folatt

Odpowiedzi:


49

tee i> mogą być używane do przekierowywania danych, ponieważ mają one służyć do przekierowywania danych w systemie Linux.

sed natomiast jest edytorem strumieniowym. sed nie jest przeznaczony do przekierowywania danych jako tee i> ma być. Aby to zrobić, możesz jednak użyć kombinacji poleceń.

użyj tee lub> z sed

sed 's/Hello/Hi/g' file-name | tee file

lub

sed 's/Hello/Hi/g' file-name > file

użyj sed z opcją -i

sed -i 's/Hello/Hi/g' file-name

ostatni nie przekierowuje, zamiast tego wprowadzi zmiany w samym pliku.


2
Dzięki. Zrozumiałeś moje pytanie. Więc odpowiedź brzmi nie. Pomyślałem, sedże sam może to zrobić, ponieważ jest również w stanie tworzyć pliki kopii zapasowej z -i.bakopcją.
Folatt

2
Poprawny. Również -i.bak nie jest stałą opcją, możesz użyć dowolnego rozszerzenia, które ma mieć plik kopii zapasowej. na przykład -i.log będzie również działać. :)
ankidaemon

Chciałbym tylko dodać, że tak naprawdę szukałem echo "test" | dd of=file status=none, tłumiąc wyjście echa bez użycia niejasnego przekierowania wyjścia 2> /dev/null, ale zamiast tego poprosiłem o ograniczenia sed. Byłem pod wielkim wrażeniem umiejętności seda, ponieważ jest w stanie dodawać wiersze w pliku, co daje mi wrażenie, że sed może zrobić wszystko, co może zrobić tee i więcej.
Folatt

11

sedma wpolecenie, które może zrobić to, czego potrzebujesz:

w nazwa pliku

Zapisz bieżącą przestrzeń wzorca do nazwy pliku.

sed 'w file'sam w sobie będzie miał taki sam efekt jak tee file. Jeśli są inne polecenia sed, wstaw wostatnie:

sed 's/This/That/;w file'

Jednak -n/--quiet/--silentopcja ta nie wpłynie na to . To tylko tłumi zawartość, która w innym przypadku trafiłaby na standardowe wyjście.


0

Jak ankidaemon poprawnie wskazał, w jaki sposób możemy zapisać dane wyjściowe sed do pliku. Chciałbym dodać, że jeśli wykonujemy pewne operacje na pliku, tj. Zamień i chciałbym zapisać dane wyjściowe w tym samym pliku. Istnieje -iflaga sedumożliwiająca edycję w miejscu. Spowoduje to jednak utworzenie pliku kopii zapasowej. Jeśli nie jest to potrzebne, można to zrobić, przekazując pustą nazwę pliku do -iflagi.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.