Nowe posty

Autor Wątek: Edycja pliku tekstoego  (Przeczytany 1980 razy)

darek444

  • Gość
Edycja pliku tekstoego
« dnia: 2019-02-21, 22:44:28 »
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.

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3047
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Odp: Edycja pliku tekstoego
« Odpowiedź #1 dnia: 2019-02-22, 09:27:03 »
Pierwszą część robisz grep-em z parametrem -n:

split.sh
#!/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"

Drugą część robisz generując plik SED-a z odpowienimi podmiankami

join.sh
#!/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"

Użycie:

plik_we
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"

potem

./split.sh ls plik_we

daje plik_we.match:
4:alias ls="ls --color=always"
5:alias ll="ls --color=always -l"
6:alias la="ls --color=always -la"

ten plik edytujesz, np do takiej postaci:
4:alias ls="ls -1"
6:alias la="ls --color=never -la"

i łączysz z plikiem źródłowym:
./join.sh plik_we

W wyniku dostajesz taki plik_we:
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"
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

darek444

  • Gość
Odp: Edycja pliku tekstoego
« Odpowiedź #2 dnia: 2019-02-24, 21:32:12 »
Jestem lekko zdziwiony że tak szybko ktoś odpisał i rozwiązał mój problem dziękuje dziękuje

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3047
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Odp: Edycja pliku tekstoego
« Odpowiedź #3 dnia: 2019-02-25, 08:12:12 »
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).
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

darek444

  • Gość
Odp: Edycja pliku tekstoego
« Odpowiedź #4 dnia: 2019-02-28, 21:13:15 »
Niestety uzmysłowiłeś  mi że przede-mną daleka droga w poznawani Linuxa, a skrypt nie był był na zaliczanie niestety.

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3047
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Odp: Edycja pliku tekstoego
« Odpowiedź #5 dnia: 2019-03-01, 07:50:34 »
To akurat nie specyficzne dla Linuksa. Tak działają wszystkie Uniksowante - miej pierdylion małych programików, z których każdy robi jedną rzecz, ale robi to dobrze.

Choć akurat jak sam bym potrzebował częściej robić taki manewr jak Ty, to pewnie napisałbym jakiś programik w go albo Ruście zamiast rzeźbić w skryptach. Z 10 lat temu pewnie programik byłby w Perlu, Pythonie albo Rubym, ale na dziś go jest u mnie "pełniącym obowiązki uniwersalnego języka skryptowego".

Cytuj
przede mną daleka droga w poznawaniu Linuksa
A tu tylko cykl poradnik-praktyka-poradnik-praktyka. Na początek poszukaj sobie "Linux Shell Scripting Cookbook"(*), taka mapa autostrad po konsoli. Jak jakiś przepis jest podobny tematycznie do twojej potrzeby, to poszukaj pełnych dokumentacji do poszczególnych poleceń.

(*) Jak znajdziesz to w PDFie, to nie będzie to do końca nielegalne, bo wydawca przez pewien czas rozdawał tę książkę za darmo.
« Ostatnia zmiana: 2019-03-01, 07:52:13 wysłana przez Paweł Kraszewski »
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy