1. Head
head plik | tail plik, które nie działa
Nie wiem co chciałeś przez to osiągnąć.
- Jak dla mnie shakowales head, tym
bo np. w
$ head --help
Usage: head [OPTION]... [FILE]...
Print the first 10 lines of each FILE to standard output.
...
u mnie nie pisze ze można podać liczbę zamiast opcji.
:D Ale fakt faktem działa.
- Jesli poczytasz dokladniej "head --help" to bedziesz mogl np zrobic
$ head -n 2 conf | tail -n 1
SystemGroup
Czyli head wyswietli 2 piersze linie , a potem tail wyswietli z poprzedniego wyniku jedna linie od konca.
2. Grep
Kiedy uzywasz grep mozesz otrzymać kilka linii,
Natomiast ty potrzebujesz otrzymać konkretna linie do podmiany.
$ grep Listen plik
Listen *:@DEFAULT_IPP_PORT@
Listen localhost:@DEFAULT_IPP_PORT@
Jeśli chcesz podmieniac cale linie ktore zawieraja dane slowo,
to moglbys najpierw je wyszukac, a potem w petli uzyc sed.
Teoretyczny przyklad tylko
LISTA_LINI=$(grep sdsdsdsds /etc/plikkonf)
LICZBA_LINI=$(grep sdsdsdsds /etc/plikkonf | wc -l)
for i in `seq 1 $LICZBA_LINI`
do
LINIA_KOLEJNO=$(awk 'NR=='$i <<< "$LISTA_LINI")
sed -i -e "s/${LINIA_KOLEJNO}/blablabal${1}/g" /etc/plikkonf
done
PS: Kod troche sie na forum rozjechal,
mam na mysli ze komendy w nawiasach ( ) sa w jednej linii.
3. Drobne rady:
- Jesli beda Cie denerwowac ' ' ' ' to zamiast tego mozesz sprobowac uzyc " "
- Jesli bedzie problem ze znalezieniem zmiennej
$ZMIENNAjuznie , mozesz zapisac ${ZMIENNA}juznie
- Mozesz dodac wlasne debugowanie
# Debugowanie wlaczyc "on" , wylaczyc "off"
DEBUG0="on"
function DEBUG()
{
[ "$DEBUG0" == "on" ] && $@
}
ZMIENNA="12"
DEBUG echo "Jesli wlaczone debugowanie wyswietli zmienna $ZMIENNA"
Oczywiscie do skryptu mozesz sobie zbudowac wlasny --help i tam dodac debugowanie.
Zamiast pętli możesz jeszcze użyć wyrażenia regularnego
https://www.tutorialspoint.com/unix/unix-regular-expressions.htm
Czyli na podstawie tego poradnika teoretycznie by wyglądało tak
sed -e "s/^sdsdsdsds.*$/blablabal${1}/" /etc/plikkonf
- Ta komenda podmieni tylko te linie zaczynajace sie na sdsdsdsds.
Jesli w srodku wystapi sdsdsdsds, to tego nie ruszy (zrobilem to celowo).
- Jesli bys chcial podmienic wszystko co zawiera sdsdsdsds
sed -e "s/^.*sdsdsdsds.*$/blablabal${1}/" /etc/plikkonf
Dla pewności przetestuj co Ci najbardziej odpowiada i z rożnymi przypadkami. (zeby Ci czegoś ważnego nie podmieniło)
:)