Получить первые два поля из первого столбца

К сожалению, модуль файловой системы cifsядра вообще не читает /etc/samba/smb.conf. Клиентский модуль CIFS, который позволяет монтировать файловые ресурсы Windows, полностью отделен от Samba.

Уровень протокола по умолчанию в модуле cifsбыл изменен на SMB3 в ванильном ядре версии 4.13, а исправление согласования нескольких диалектов -(фактически установило значение по умолчанию на «SMB2.1 или более позднюю версию» )был добавлен к ядрам ванили в сентябре 2017 года.

Я почти уверен, что в «корпоративных» дистрибутивах Linux исправление было перенесено на более ранние ядра, но в Arch единственным вариантом может быть обновление ядра до версии 4.13 или более поздней.

Вот ссылка на соответствующий патч в Git на kernel.org. Идентификатор фиксации может быть полезен при отслеживании исправления в определенных версиях ядра.

1
24.04.2020, 18:35
4 ответа

Нет ничего плохого в решении @terdon, но просто для удовольствия gawkрешение, использующее

awk -F':[^a-z]+' '{print $1, $2}' file1

Составляет IFSкак контекстуальное regex, которое соответствует любой непрерывной строке, начинающейся с :, за которой следует комбинация переменной длины из чего угодно, кроме строчных букв [^a-z]+, что просто оставляет вам два нужных фрагмента.

4
19.03.2021, 02:26

Помимо всех решений GNU coreutil, он также будет работать, если вы откроете его в vimи наберете

:%norm 0f:f:vf hd

, за которым следует Enter.

Что он делает:

:переводит вас в командный режим

%модификатор для запуска normво всех строках файла

normкоманда, которая может выполняться на нескольких строках и работает так же, как если бы вы набрали то, что следует за ней в обычном режиме.

0чтобы перейти к началу строки

f:для перехода к следующему вхождению символа двоеточия в тексте (т. е. вашего разделителя полей. Сделайте это дважды, чтобы перейти к началу 3-го столбца

.

vдля входа в визуальный режим (, потому что это значительно упрощает выбор материала для удаления:-))

(обратите внимание на пробел!! )для перехода к следующему вхождению пробела (т. е. к другому разделителю полей )hчтобы перейти на один символ влево (чтобы мы не удаляли пробел, когда мы удаляем наш выбор впоследствии )и, наконец,

dдля удаления выбранного материала

2
19.03.2021, 02:26

Если все входные значения совпадают, то просто вывести все столбцы, кроме этих двух:

awk -F'[: ]' '{ print $1":"$2"  "$5 }' inputFile
5
19.03.2021, 02:26

Несколько вариантов:

$ awk -F'[: ]' '{print $1":"$2,$5}' file 
1:a rs123
1:b rs456
1:c rs174

Это указывает awkиспользовать либо пробел, либо :в качестве разделителя полей, а затем напечатать первое поле, :, второе поле и 5-е поле.

$ sed -E 's/^([^:]*:[^:]*):.* (.*)$/\1 \2/' file 
1:a rs123
1:b rs456
1:c rs174

Здесь sedзахватывает любой не-:([^:]*)от начала строки(^)до первого :и следующего участка не-:символов до второго :. Затем мы сопоставляем все до последнего пробела строки и захватываем все символы после него. Наконец, вся строка заменяется двумя захваченными паттернами (\1 \2).

$ perl -pe 's/(.+?:.+?):.*\s(\S+)$/$1 $2/' file 
1:a rs123
1:b rs456
1:c rs174

Это та же основная идея, что и описанный выше подход sed, но в нем используются не -жадные шаблоны регулярных выражений и выполняется поиск не -пробельных символов после последнего пробельного символа в строке.

4
19.03.2021, 02:26

Теги

Похожие вопросы