Programowanie > Bash, skrypty powłoki
Edycja pliku tekstoego
darek444:
Witam chciałbym napisać skrypt w baszu ,a właściwe dwa skrypty. Pierwszy ma pobrać wiersze tekstu (w których się znajduje słowo "test" i zapisywać je do pliku tekstowego w raz z numerami wierszy(do dalszej edycji). Drugi skrypt mam podmienić wiersze bazowego pliku tymi edytowanymi z pieszego skryptu. Proszę o podpowiedz nakierowanie.
Paweł Kraszewski:
Pierwszą część robisz grep-em z parametrem -n:
split.sh
--- Kod: ---
#!/bin/sh
if [ $# -ne 2 ]; then
echo "$0 WZORZEC PLIK"
exit 1
fi
if [ ! -f "$2" ]; then
echo "Brak pliku $2"
exit 2
fi
grep -n "$1" "$2" > "$2.match"
--- Koniec kodu ---
Drugą część robisz generując plik SED-a z odpowienimi podmiankami
join.sh
--- Kod: ---
#!/bin/sh
if [ $# -ne 1 ]; then
echo "$0 PLIK"
exit 1
fi
if [ ! -f "$1" ]; then
echo "Brak pliku $1"
exit 2
fi
if [ ! -f "$1.match" ]; then
echo "Brak pliku $1.match"
exit 3
fi
sed -e 's/%/\\%/g' -e 's/^\([0-9]\+\):\(.*\)$/\1 s%^.*$%\2%/' "$1.match" > "$1.sed"
mv "$1" "$1.bak"
sed -f "$1.sed" "$1.bak" > "$1"
rm "$1.sed"
--- Koniec kodu ---
Użycie:
plik_we
--- Kod: ---
alias man="man -Len_US "
alias em="emacs -nw"
alias vi="nvim"
alias ls="ls --color=always"
alias ll="ls --color=always -l"
alias la="ls --color=always -la"
--- Koniec kodu ---
potem
--- Kod: ---
./split.sh ls plik_we
--- Koniec kodu ---
daje plik_we.match:
--- Kod: ---
4:alias ls="ls --color=always"
5:alias ll="ls --color=always -l"
6:alias la="ls --color=always -la"
--- Koniec kodu ---
ten plik edytujesz, np do takiej postaci:
--- Kod: ---
4:alias ls="ls -1"
6:alias la="ls --color=never -la"
--- Koniec kodu ---
i łączysz z plikiem źródłowym:
--- Kod: ---
./join.sh plik_we
--- Koniec kodu ---
W wyniku dostajesz taki plik_we:
--- Kod: ---
alias man="man -Len_US "
alias em="emacs -nw"
alias vi="nvim"
alias ls="ls -1"
alias ll="ls --color=always -l"
alias la="ls --color=never -la"
--- Koniec kodu ---
darek444:
Jestem lekko zdziwiony że tak szybko ktoś odpisał i rozwiązał mój problem dziękuje dziękuje
Paweł Kraszewski:
Jak to zaliczenie, to i tak będziesz się musiał gęsto z budowy wygenerowanego SEDa tłumaczyć. Jak nie, to cieszę się, że mogłem pomóc.
A, program jest czuły na '\' w pliku poprawek (także, jeżeli odziedziczy go po oryginale).
darek444:
Niestety uzmysłowiłeś mi że przede-mną daleka droga w poznawani Linuxa, a skrypt nie był był na zaliczanie niestety.
Nawigacja
[#] Następna strona
Idź do wersji pełnej