Portál AbcLinuxu, 26. dubna 2024 23:37


Dotaz: Hromadné odstranění několiká řádků v souborech (find, sed)

24.2.2014 16:14 Kloban | skóre: 13 | Brno
Hromadné odstranění několiká řádků v souborech (find, sed)
Přečteno: 367×
Odpovědět | Admin
Ahoj, potřebuji ve všech souborech smazat řádek "[search_form]" a pět následujících řádků.
Snažím se to udělat pomocí příkazu
find . -exec sed -e '/*\[search_form\]$^.*$^.*$^.*$^.*$^.*$/d' {};
Ten mi ale vypíše
find: missing argument to `-exec'
Můžete mi prosím poradit, kde mám chybu?
Díky

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

24.2.2014 16:22 axel
Rozbalit Rozbalit vše Re: Hromadné odstranění několiká řádků v souborech (find, sed)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Na cmdline se musi nektere znaky escapovat (napr. sloz. zavorky).
Tarmaq avatar 24.2.2014 16:35 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Hromadné odstranění několiká řádků v souborech (find, sed)
Odpovědět | | Sbalit | Link | Blokovat | Admin
find . -exec sed -e '/*\[search_form\]$/,+5d' {};
Don't panic!
Tarmaq avatar 24.2.2014 16:37 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Hromadné odstranění několiká řádků v souborech (find, sed)
orpava, chybi tam zpetne lomitko
find . -exec sed -e '/*\[search_form\]$/,+5d' {} \;
Don't panic!
Tarmaq avatar 24.2.2014 16:43 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Hromadné odstranění několiká řádků v souborech (find, sed)
jinak pokud to chces v danych souborech i prepsat a ne jen vypsat na obrazovku, predej sedu prepinac -i, ma-li ho tvoje verze sedu k dispozici
Don't panic!
24.2.2014 16:39 Kloban | skóre: 13 | Brno
Rozbalit Rozbalit vše Re: Hromadné odstranění několiká řádků v souborech (find, sed)
Bohužel to hlásí stále stejnou chybu. A to i při escapování složených závorek. Nicméně si myslím že v tomto významu by se escapovat neměli.
Tarmaq avatar 24.2.2014 16:42 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Hromadné odstranění několiká řádků v souborech (find, sed)
a co to lomitko, to tam mas?
Don't panic!
Tarmaq avatar 24.2.2014 16:56 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Hromadné odstranění několiká řádků v souborech (find, sed)
Odpovědět | | Sbalit | Link | Blokovat | Admin
btw ten regular [search_form] tam je k cemu? Nepletes si nahodou hranate a kulate zavorky?
Don't panic!
24.2.2014 17:04 Kloban | skóre: 13 | Brno
Rozbalit Rozbalit vše Re: Hromadné odstranění několiká řádků v souborech (find, sed)
[search_form] všetně závorek je text který hledám. Teď se zdá že to funguje, akorát nevím jak je to s tím argumentem -i, protože mě to teď vytvořilo hromadu dalších souborů kde se na konec přidalo pisménko i a e. Takže to ještě není úplně ono, ale odstanu se k tomu asi až zítra.
25.2.2014 06:45 soyo
Rozbalit Rozbalit vše Re: Hromadné odstranění několiká řádků v souborech (find, sed)
Ahoj, za parametrom -i ma byt medzera, alebo bez medzery pripona backupu. Napr.: sed -i.old -e ... Takze ta nova hromada suborov su pravdepodobne origo subory (tipujem na : sed -ie ...). Skus na nejaku dvojicu postvat diff -u.
25.2.2014 09:30 Kloban | skóre: 13 | Brno
Rozbalit Rozbalit vše Re: Hromadné odstranění několiká řádků v souborech (find, sed)
Ano je to jak píšeš. Ale když dám za i mezeru, tak se nic neprovede a vypíše to:
sed: -e expression #1, char 1: unknown command: `-'
A orig soubory zachovávat nechci. Chci je přepsat.
Tarmaq avatar 25.2.2014 11:07 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Hromadné odstranění několiká řádků v souborech (find, sed)
vloz sem cely prikaz.
Don't panic!
25.2.2014 11:14 Kloban | skóre: 13 | Brno
Rozbalit Rozbalit vše Re: Hromadné odstranění několiká řádků v souborech (find, sed)
find . -exec sed -e -i[ ] '/*\[search_form\]$/,+5d' {} \;
Už jsem ty soubory projel ručně. Bylo to tak hraniční počet, kdy se to ještě dalo (30 minut). Nicméně mám zálohu těch původních a tak se rád doberu výsledku ať vím pro příště.
25.2.2014 19:36 soyo
Rozbalit Rozbalit vše Re: Hromadné odstranění několiká řádků v souborech (find, sed)
Ahoj, za -e ma prist expression a nie -i:

find . -exec sed -i -e '/*\[search_form\]$/,+5d' {} \;

A pokial si nechces komplikovat zivot escapovanim znakov v exec, osetrovanim medzier v nazvoch a podobne:

find . -type f | while read i; do sed -i -e '/*\[search_form\]$/,+5d' "$i"; done

alebo

while read i; do sed -i -e '/*\[search_form\]$/,+5d' "$i"; done < <(find . -type f)
25.2.2014 00:06 Ivan
Rozbalit Rozbalit vše Re: Hromadné odstranění několiká řádků v souborech (find, sed)
Odpovědět | | Sbalit | Link | Blokovat | Admin
A co "obycejny":
grep -v -A5 '\[fdgfd]\'
-v negace
-A after 5 rows
25.2.2014 09:14 Kloban | skóre: 13 | Brno
Rozbalit Rozbalit vše Re: Hromadné odstranění několiká řádků v souborech (find, sed)
To mě ty soubory ale přece neupraví.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.