GNU/Linux >> Znalost Linux >  >> Linux

Citáty uvnitř Backticks Vnitřní nabídky v Ksh?

Snažím se získat soubor aktuálního data pomocí následujícího příkazu v HP-UX Unix:

$ ls -lrt ABC.LOG* |grep "`date +"%b %d"`"

Ale dává mi to chybu:

ksh: : cannot execute
grep: can't open %d

Nějaké návrhy?

Přijatá odpověď:

Chyba pramení z citace argumentů grep a skutečnost, že backtickům se vnořování příliš nedaří:

grep "`date +"%b %d"`"

To je lepší napsat jako

grep "`date +'%b %d'`"

… nebo ještě lépe,

grep "$(date +'%b %d')"

Ve skutečnosti s $(...) místo zpětných zaškrtnutí byste měli být schopni ponechat vnitřní dvojité uvozovky:

grep "$(date +"%b %d")"

Alternativa k grepování výstupu ls by bylo udělat

find . -type f -name "ABC.LOG*" -ctime -1

Tím by byly nalezeny všechny běžné soubory (-type f ) v aktuálním adresáři, jehož názvy odpovídají danému vzoru a jehož ctime je méně než 24 hodin od aktuálního času . Ctime souboru je čas, kdy byla provedena poslední úprava dat nebo metadat souboru.

To však není přesně ekvivalentní tomu, čeho se snažíte dosáhnout. To se také vrací do podadresářů.


Linux
  1. Zástupné znaky uvnitř uvozovek?

  2. Grep -v Neočekávané chování?

  3. Kontrola, zda skript běží?

  1. Proč se Tilda (~) nerozšíří uvnitř dvojitých uvozovek?

  2. Proč stránky Unix Man Pages používají dvojité zaškrtnutí místo dvojitých uvozovek?

  3. Jak mohu grep rekurzivně?

  1. Grep:Vyčerpaná paměť?

  2. Náhrada příkazů pomocí „?

  3. Řez / Grep A Df -h?