Вы используете стандартное ядро debian или ac? Скомпилированное на заказ ядро? Если в наличии, то для вашего пакета linux-image- * должен быть соответствующий пакет linux-headers- *.
В Debian также есть виртуальные пакеты с именами linux-image- $ arch
и linux-headers- $ arch
(например, где $ arch
равно amd64]
или 586
или 686-pae
и т. Д.), Которые зависят от самых последних доступных пакетов ядра, поэтому, если ваша система amd64
, то
apt- get install linux-image-amd64 linux-headers-amd64
установит самый последний образ ядра и заголовки для вашей версии debian.
То же самое верно, если вы используете ядра из репозитория Liquorix , но виртуальные пакеты имеют несколько другие имена:
apt-get install linux-image-liquorix-amd64 linux-headers- ликориксamd64
Обратите внимание, что для сетевых карт realtek вам, вероятно, также потребуется установить микропрограмму realtek из раздела non-free архивов debian. Убедитесь, что non-free
находится в вашем /etc/apt/sources.list
, и запустите
apt-get install firmware-realtek
Наконец, для компиляции модулей вам, вероятно, также понадобится dkms
или хотя бы установлен пакет build-essential
.
Анализ вывода ls
— плохая идея. (вывод ls
предназначен исключительно для просмотра ). Для получения дополнительной информации см. вопрос «Почему *не *parse `ls `? ».
Вот как это можно сделать в соответствии с/bin/sh
:
for filename in t-*-*.c; do
[ ! -f "$filename" ] && continue
number=${filename#t-} # remove "t-" from start of filename
number=${number%%-*} # remove everything from first "-" in what remains
printf '%s\n' "$number"
done
Это будет перебирать все имена файлов в текущем каталоге, имя которых соответствует шаблону t-*-*.c
. Для каждого из этих имен с самого начала убирается бит t-
, а затем второй -
и все последующее удаляется с другим расширением параметра.
Расширение ${variable#word}
удалит (кратчайшее )соответствие для word
из начало из $variable
, а ${variable%%word}
удалит (самое длинное )] соответствует word
от конца строки.
С bash
, используя сопоставление регулярных выражений в именах файлов:
for filename in t-*-*.c; do
[ ! -f "$filename" ] && continue
if [[ "$filename" =~ ^t-([0-9]+)- ]]; then
printf '%s\n' "${BASH_REMATCH[1]}"
fi
done
Это сопоставит и захватит цифры после t-
в каждом имени файла. Захваченная группа цифр доступна в ${BASH_REMATCH[1]}
после успешного сопоставления. Индекс 1
относится к первой группе захвата (в скобках )в регулярном выражении.
Для медленного, но, возможно, удобного (как в "знакомом" )решении, вы можете вызвать внешнюю команду для разбора интересующего вас бита строки:
for filename in t-*-*.c; do
[ ! -f "$filename" ] && continue
cut -d '-' -f 2 <<<"$filename"
done
Это предполагает bash
и что вы можете вызывать cut
в цикле. Это было бы намного медленнее, чем использование операции, встроенной в саму оболочку. Команде cut
здесь предлагается вернуть второе-
-поле с разделителями из строки, переданной ей изbash
(с использованием перенаправления «здесь -строка» ).
Согласно вашему выводу:
ls|awk -F"-" '{print $2}'
Должно работать,но если вы хотите принять во внимание часть t-
, то
ls|grep ^t-|awk -F"-" '{print $2}'
или
ls|awk -F"t-" '{print $2}'|awk -F"-" '{print $1}'
Когда я создал список файлов из вашего примера, мой ls
сортирует их таким образом:
$ ls -1
myFile.c
mySecondFile.c
t-1-myFirstTest.c
t-21-tset241.c
t-3-test1234.c
t-42-my_second_test.c
В результате нижеприведенная функция bash выводит символы новой строки и номера для файлов в том же порядке.
I want to delete everything of this text except the newlines and the numbers between t- and the second -
Я интерпретировал это как означающее, что имена файлов, которые не соответствуют t-
, должны быть «удалены, за исключением новой строки», что означает, что :выводит пустую строку для этих имен файлов, но в противном случае выводит числа между тире.
lsnums ()
{
for f in *
do
if [[ "$f" =~ t-([[:digit:]]+)- ]]; then
printf '%s\n' "${BASH_REMATCH[1]}"
else
echo
fi
done
}
В результате получается:
$ lsnums
1
21
3
42
... где две пустые строки соответствуют файлам первого типа, начинающимся с my
вместо t-
.