Ответ 1
Возможно, эта команда поможет вам
find ./ -maxdepth 1 ! -path "*txt"
Возможный дубликат:
Как использовать обратные или отрицательные подстановочные знаки при сопоставлении шаблонов в оболочке unix/linux?
Я прочитал страницу man
для ls
, и я не могу найти параметр, чтобы отобразить все, что соответствует не. Вы знаете, как выполнить эту операцию?
Например: скажем, моя директория:
> ls
a.txt b.mkv c.txt d.mp3 e.flv
Теперь я хотел бы сделать что-то, что делает следующее
> ls -[SOME_OPTION] *.txt
b.mkv d.mp3 e.flv
Есть ли такая опция?
Если нет, есть ли способ передать вывод ls
другой функции (возможно, sed
), которая отображает только те, которые мне бы хотелось?
Я точно не знаю, как это сделать, но я предполагаю, что это будет что-то вроде:
> ls | sed [SOMETHING]
Мне действительно нужно научиться использовать sed
, awk
и grep
, но я все время зацикливаюсь на понимании того, как писать регулярные выражения. Я понимаю концепцию регулярных выражений четко, но я запутался между регулярными выражениями, использующими другой синтаксис.
Любая помощь будет очень признательна!
EDIT:
Я забыл упомянуть, что я запускаю Mac OS X, поэтому функции могут немного отличаться от тех, которые обсуждались в других ответах для оболочки unix/linux (следовательно, некоторые из моих путаницей с sed
, awk
, и grep
).
Возможно, эта команда поможет вам
find ./ -maxdepth 1 ! -path "*txt"
это может помочь вам
ls --ignore=*.txt
Он не будет отображать файлы .txt в вашем каталоге.
ls|grep -v ".txt"
Помогает ли это?
ls просто перечисляет, какие аргументы он представляет. *.txt
расширяется до a.txt c.txt
, прежде чем он его увидит, попробуйте echo *.txt
.
Чтобы сделать то, что вы задаете с помощью sed, вы можете удалить шаблон из его ввода, например:
ls | sed '/\.txt$/d'
Удалит все строки, заканчивающиеся на .txt
.
С bash и zsh вы можете иметь оболочку для инвертированного расширения, с bash это будет:
ls !(*.txt)
ЗШ:
ls *~*.txt
Обратите внимание, что обе оболочки нуждаются в расширенной опции glob для включения, shopt -s extglob
с bash и setopt extendedglob
с zsh.
Один из способов: find
:
find . -maxdepth 1 -type f -not -name "*.txt" -printf "%f\n"