Вы можете использовать программу cut
следующим образом:
cat textfile.txt | cut -d':' -f2 | cut -d' ' -f2
Вот как это работает:
Сначала разделите текст уровень сигнала: 20 дБм (100,00 мВт)
на разделителе «двоеточие» с опцией -d ':'
и возьмите второе поле с опцией -f2
.
Затем разделите результат 20 дБм (100,00 мВт)
на разделитель «пробел» и снова возьмите второе поле.
«Типы файлов» в системе Unix — это такие вещи, как обычные файлы, каталоги, именованные каналы, специальные символьные файлы, символические ссылки и т. д. Это типы файлов, которые find
могут фильтроваться с помощью -type
] вариант.
Утилита find
не может сама по себе различать «скрипт оболочки», «файл изображения JPEG» или любой другой тип обычного файла . Однако эти типы данных можно различить с помощью утилиты file
, которая просматривает определенные сигнатуры в самих файлах, чтобы определить их тип.
Распространенным способом маркировки различных типов файлов данных является их MIME-тип , и file
можно определить MIME-тип файла.
Использование file
с find
для определения MIME-типа обычных файлов и его использование только для поиска сценариев оболочки:
find. -type f -exec sh -c '
case $( file -bi "$1" ) in (*/x-shellscript*) exit 0; esac
exit 1' sh {} \; -print
или, используя bash
,
find. -type f -exec bash -c '
[[ "$( file -bi "$1" )" == */x-shellscript* ]]' bash {} \; -print
Добавьте -name sunrise
перед -exec
, если вы хотите обнаруживать только скрипты с таким именем.
Приведенная выше команда find
найдет все обычные файлы в текущем каталоге или ниже него и для каждого такого файла вызовет короткий скрипт в -строковой оболочке. Этот скрипт запускает file -bi
для найденного файла и завершает работу с нулевым статусом выхода, если вывод этой команды содержит строку /x-shellscript
. Если вывод не содержит этой строки, он завершается с нулевым статусом выхода, отличным от -, что приводит к немедленному продолжению find
со следующим файлом. Если было обнаружено, что файл является сценарием оболочки, команда find
продолжит вывод пути к файлу (и -print
в конце, который также может быть заменен каким-либо другим действием ).
Команда file -bi
выводит MIME-тип файла. Для сценария оболочки в Linux (и большинстве других систем )это будет что-то вроде
text/x-shellscript; charset=us-ascii
в то время как в системах с более старой версией утилиты file
это может быть
application/x-shellscript
Общий бит — это подстрока /x-shellscript
.
Обратите внимание, что в macOS вам придется использовать file -bI
вместо file -bi
по причинам(опция -i
делает что-то совсем другое ). В остальном вывод в macOS похож на вывод в системе Linux.
Если вы хотите выполнить какое-то пользовательское действие над каждым найденным скриптом оболочки, вы можете сделать это с другим -exec
вместо -print
в командах find
выше, но также можно было бы сделать
find. -type f -exec sh -c '
for pathname do
case $( file -bi "$pathname" ) in
*/x-shellscript*) ;;
*) continue
esac
# some code here that acts on "$pathname"
done' sh {} +
или с bash
,
find. -type f -exec bash -c '
for pathname do
[[ "$( file -bi "$pathname" )" != */x-shellscript* ]] && continue
# some code here that acts on "$pathname"
done' bash {} +
Связанные:
Использование perl
модуля File::LibMagic
:
perl -MFile::LibMagic=:easy -MFile::Find -le '
find sub {
print $File::Find::name if
$_ eq "sunrise" and
-f and
MagicFile$_ eq "PEM RSA private key"
}, @ARGV' --.
Вы можете выполнить find
для каждого найденного файла, а затем выполнить grep для получения интересующего вас результата.
# When looking for ASCII Text
find. -type -exec file {} \; | grep "ASCII"
# or for MS Word Documents
find. -type f -exec file {} \; | grep "Microsoft Word"
Я предлагаю сделать шаблон поиска как можно ближе к вашим ожиданиям, чтобы количество ложноположительных совпадений было низким.
Имейте в виду, что файлы с символами новой строки в именах файлов могут вызвать проблемы с этим подходом.