Programowanie > Bash, skrypty powłoki

Edycja pliku tekstoego

(1/2) > >>

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

[0] Indeks wiadomości

[#] Następna strona

Idź do wersji pełnej