2011-12-21 10 views
9
sed -i "/xxxxxxxxxxxx/r inc-sausage" git.html 
sed -i "/xxxxxxxxxxxx/d" git.html 

Pierwszy wstawić treść inc-kiełbasą gdy XXXXXXXXXXXX znajdujezastąpić/substytut wzór z zawartości pliku

drugie usunę XXXXXXXXXXXX

Oba polecenia zrobić dokładnie to, co chcę. Ale w jaki sposób połączyć obydwie komendy sed z jedną? Próbowałem

sed -i "s/xxxxxxxxxxxx/r inc-sauasge" git.html 

Odpowiedz

9

Na początek, coould złączyć obie sed poleceń w jednej linii i uniknąć powtarzania ciąg wyszukiwania, podobnie jak to:

sed -i -e "/xxxxxxxxxxxx/r inc-sausage" -e "//d" git.html 

Ponadto, jeśli chcesz usunąć xxxxxxxxxxxx i nie inne rzeczy w swojej linii, można to zrobić w zamian:

sed -i -e "/xxxxxxxxxxxx/r inc-sausage" -e "s///" git.html 
3

To może pracować dla Ciebie:

sed -i '/xxxxxxxxxxxx/{r inc-sausage'$'\n''d}' git.html 

Objaśnienie:

Zobacz here dlaczego $'\n' jest konieczne. Zauważ też, że polecenie d musi być ostatnim, ponieważ usuwa obszar wzorów, a następnie natychmiast rozpoczyna następny cykl.

Lub GNU sed:

sed -i '/xxxxxxxxxxxx/s|.*|cat inc-sausage|e' git.html 
Powiązane problemy