шар в солярисе csh - PullRequest
       17

шар в солярисе csh

1 голос
/ 21 сентября 2011

Я хочу перечислить все каталоги, которые начинаются с.в текущем каталоге.Я не хочу, чтобы предыдущий каталог (..) был в списке, поэтому у меня было регулярное выражение примерно так.Я использую csh

ls .[^.]*

Он отлично работает на платформах с вариантами UNIX, но в солярисе я все еще использую csh, но он перечисляет меня только .. каталог.Как я могу указать регулярное выражение с точной функциональностью в Solaris.Он работает в bash, но я должен использовать только csh, так как он гарантированно будет доступен на каждой коробке SOLARIS в нашей организации.

Ответы [ 3 ]

2 голосов
/ 21 сентября 2011

Вы можете сделать это с /bin/sh, но с немного другим синтаксисом; он использует ! вместо ^ для отмены набора символов:

ls .[!.]*

Обратите внимание, что это шаблон сопоставления файлов ( glob ), а не регулярное выражение.

Но, учитывая различия, которые вы видите в синтаксисе glob, поддерживаемом различными оболочками, вам может быть лучше использовать grep с реальными регулярными выражениями.

1 голос
/ 21 сентября 2011

csh?Вау, я не знал, что они все еще сделали это :) Ваш ls .[^.]* работает на OSX csh, поэтому я не знаю, что происходит с Solaris csh.Хитрая резервная копия будет выглядеть примерно так:

ls `ls -a | grep '^\.[^.].*'`

-a для ls говорит ему включить все точечные файлы в список, а затем немного grep для работы сточек.Это соответствует тому, что ls .[^.]* делает в OSX csh, надеюсь, оно будет работать и с Solaris.

0 голосов
/ 21 сентября 2011

Классы символов в globs в csh не поддерживают отрицание ...

Со страницы руководства в Solaris:

 [...] Match any single character in the enclosed list(s)  or
       range(s).  A  list is a string of characters.  A range
       is  two  characters  separated  by  a  dash  (-),  and
       includes  all  the  characters in between in the ASCII
       collating sequence (see ascii(5)).

Итак ... вы можете создать класс символов, включающий диапазон от \ 040 (пробел) до '-' (символ перед '.', Затем от '/' до '~' (оставшиеся печатаемые символы ascii) ).

ls -a .[\ --/-~]*

Кажется, это работает для меня, но я не проверил вывод с помощью зубчатого гребня.

...