Portál AbcLinuxu, 5. května 2025 16:48

Dotaz: ambiguous redirect / Odstranění prázdných řádků

2.7.2013 13:34 Jura
ambiguous redirect / Odstranění prázdných řádků
Přečteno: 617×
Odpovědět | Admin

Ahoj,

mám script co bere řádek po řádku,nějak ho zpracuje a s kolegou jsme dodali filtr co by měl odstranit prázdné řádky a prázdný ukončovací znak na konci.

 

Ale píše nám to chybu ambiguous redirect

 

Výsek ze scriptu (poslední řádka

done < $(cat DBtest.txt | grep -v "^$" | grep -v "^[ ]*$") ambiguous redirect


Celý script


#!/bin/bash

while read line do

TĚLO SCRIPTU CO PRACUJE S ŔÁDKY

done < $(cat DBtest.txt | grep -v "^$" | grep -v "^[ ]*$")

 

a) dá se filtr nějak upravit

b) Je nějaké lepší řešení ?

 

Díky

 

Jura


Řešení dotazu:


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

Odpovědi

Řešení 1× (Luboš Doležel (Doli))
2.7.2013 13:55 potato
Rozbalit Rozbalit vše Re: ambiguous redirect / Odstranění prázdných řádků
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ambigious redirect v podstatě znamená, že to $(cat...) se neexpanduje na jedno jméno souboru.

Pokud chceš celý výstup příkazů uvnitř $(cat...) poslat jako vstup toho while read, tak to má být
cat... | while read
Lepší řešení by bylo provést celou tu věc, kterou děláš v while read... nějakou rourou, lze-li to.

Jinak prázdný řádek vyhovuje regulárnímu výrazu ^[ ]*$ taky, takže první grep je zbytečný a stačí
<DBtest.txt grep -v '^[ ]*$' | while read ...
2.7.2013 22:43 rubicon
Rozbalit Rozbalit vše Re: ambiguous redirect / Odstranění prázdných řádků
Ono to může být i jinak.

while read ... done < <(grep -v '^ *$' DBtest.txt) nebo

while read ... done <<< "$(grep -v '^ *$' DBtest.txt)"
2.7.2013 23:21 potato
Rozbalit Rozbalit vše Re: ambiguous redirect / Odstranění prázdných řádků
Může to být různě, ovšem obfuskace roury má smysl asi jen v případě, kdy je problém s tím, že roura vytváří subshell. Jinak jsou zápisy s přesměrováním z process substitution akorát taková shellová masturbace. Žádný proces neušetří a ještě navíc nutí shell celý výstup příkazu kamsi nabufferovat, což roura obecně nevyžaduje.

Třídu znaků v grepu bych nemazal. Kdo ví, co je v té hranaté závorce doopravdy, třeba to je mezera a tabelátor...

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.