Nefunkčnost příkazu grep v zsh shellu
Dobrý den, mám menší problém funkčností příkazu grep v zsh shellu. Jde o to, že když třeba použiji příkaz:
ls -l | grep '^D'
tak se mi nevypíše vůbec nic, přitom ve složce, kde příkaz zadávám, se nachází složky Dropbox a Downloads. Nevíte někdo, čím to může být? Pokud to zkusím v bashi, funguje to bezproblémově a složky se vypíšou.
Zde pro jistotu přikládám ještě konfigurační soubor .zshrc: zQLZyL6T
Děkuji za odpovědi.
zkusit čistý zshrc (a pustit znova zsh).
2. Zjistit, kde je chyba. je v příkazu ls? dává výstup? výstup dát do proměnné a manuálně grepovat? Zkoušel jsi grep -P?, protože grep defaultně používá trapné basic regexp.
Tak s čistým .zshrc to funguje, vůbec mně nenapadlo to zkusit, díky :) Teď už jen najít v konfigu chybu...
Jinak dotaz jsem napsal špatně, nepoužívám 'ls -l', ale jen 'ls'.. Jelikož s tím přepínačen -l by to samozřejmě nevypsalo nic, protože na začátku by byly práva a ne názvy souborů.
Tak vyřešeno, je to tím: alias ls='ls --color', pro barevný výpis se na začátky jednotlivých řádků nejspíše něco přidá a díky tomu nelze používát grep s ^...
Tohle chování je správné. grep sám o sobě nevypisuje složky, ale pouze adresáře. Pokud chceš vypisovat i složky, použij přepínač -r (grep -r). To, že ti to funguje v bashi bude nejspíše tím, že máš v něm nastavený alias grep='grep -r'.
překlep: Nevypisuje složky, ale pouze soubory
11 ráno a už jsi takhle sťatý? Když má grep něco na vstupu, tak přece testuje řádky vstupu daným patternem a žádný soubory ani složky v téhle proceduře nehrají.
PS: nevíte, jestli existuje nějaký modifikátor, který by při zadání více patternů říkal, že má vybrat jen řádky, kde se shoduje aspoň jeden pattern nebo naopak všechny patterny? Nevím, jak je to teď.
k tomu lze použít logické OR a AND.
retazec1 OR retazec2 OR retazec3:
grep -e "retazec1" -e "retazec2" -e "retazec3" subor
retazec1 AND retazec2 AND retazec3:
grep retazec1 subor | grep retazec2 | grep retazec3