2010-10-21 15 views
18

Może ktoś wyjaśnić tej komendy dla mnie:"sed" polecenia w bash

cat | sed -e 's,%,$,g' | sudo tee /etc/init.d/dropbox << EOF 
    echo "Hello World" 
EOF 

czego służy komenda "sed" zrobić?

+1

sed jest skrótem od "edytora strumieni" - edytuje strumienie bajtów/znaków. –

+1

Mogliście poprosić o to jako komentarz do mojej odpowiedzi, byłbym zadowolony z jego rozszerzenia. – Benoit

Odpowiedz

22

sed jest Stream EDitor. Może wykonać cały stos really cool things, ale najczęściej zastępuje tekst.

Częścią wiersza poleceń jest s,%,$,g, aby wykonać polecenie. s oznacza zastępczy, znaki , są ogranicznikami (można używać innych znaków; popularne są /, : i @). % to wzór do dopasowania (tutaj znak procentowy) i $ to drugi wzorzec do dopasowania (tutaj dosłowny znak dolara). Wartość g na końcu oznacza g wymienianie lewostronne w każdej linii (w przeciwnym wypadku zaktualizowałoby tylko pierwsze dopasowanie).

+1

Z jakiegoś powodu sed zastępuje dla mnie wszystkie linie, a nie tylko pierwsze, gdy opuszczam "g" na końcu. na przykład 'sudo sed -i's, enabled = 0, enabled = 1, '/ etc/yum.repos.d/epel.repo' w amazońskim obrazie AWS z wersją sed 4.2.1 – Programster

+2

sed zawsze będzie działał w każdym wierszu. Opcja 'g' powoduje, że zastępuje każdy mecz w tej linii zamiast pierwszego dopasowania w tej linii. –

5

Odczytuje Hello World (cat), zastępuje wszystkie (g) wystąpienia % przez $ i (nad) zapisuje je do /etc/init.d/dropbox jako root.

18

Tutaj sed zastępuje wszystkie wystąpienia % z $ na standardowym wejściu.

Jako przykład

$ echo 'foo%bar%' | sed -e 's,%,$,g' 

będzie produkować "foo $ bar $".