Захватить определенное содержимое файла

Поэтому я знаю, что существуют инструменты для этой проблемы, потому что я слышал о них, но я не знаю, что это такое.

Я хочу сделать что-то вроде фильтрации всех данных, но имена пользователей в / etc / passwd.

Например, я хотел бы захватить user1, user2 и user3 из следующего файла. В этом случае логикой может быть «Перенести текст до первого»: «на каждую строку файла».

user1:x:1:4 user2:x:2:5 user3:x:3:6 

Результатом будет:

 user1 user2 user3 

  • Regex не соответствует
  • Как сопоставить шаблон и заменить только часть шаблона?
  • Обработка исключений sed с экранированными символами
  • Получить содержимое файла из первого экземпляра в последний экземпляр некоторой произвольной строки
  • заменить полный запятый запятой
  • grep трубопроводы в sed, заменяя inline; но я хочу, чтобы sed печатал имя файла и менял строку. Является ли это возможным?
  • Удалить конкретный столбец, если он существует в файле CSV
  • Как создать однородные столбцы из текста, содержащего как вкладки, так и пробелы?
  • 6 Solutions collect form web for “Захватить определенное содержимое файла”

    cut существует именно для этой цели. Флаг -d указывает разделитель, а -f указывает, какие поля выводить:

     cut -d: -f1 /etc/passwd 

    Аргумент -f может быть чем-то вроде 1,3 чтобы показать первое и третье поля, или 1-3 чтобы показать первые три; есть также -b и -c флаги для чтения байтов и символов вместо полей. Если вам нужно что-то более гибкое, обычно awk будет делать трюк (см . Ответ Мэтью )

    Каждый раз, когда вы хотите извлечь данные из табличного ввода, вы должны рассмотреть awk . Он доступен практически для каждой системы Unix, поэтому хорошая привычка:

     awk -F':' '{print $1}' /etc/passwd 
    • -F':' : определяет «:» как разделитель столбцов.
    • '{}' : выполнить эту инструкцию для каждой строки.
    • print $1 : напечатать первый столбец на экране.

    Вот однострочный Perl:

     perl -F/:/ -lane 'print $F[0]' /etc/passwd 

    Под perl и awk есть третий инструмент для таких заданий, который является sed:

     sed 's/:.*//' FILE 

    Это команда подстановки: substitute from colon:, за которой следует точка, которая является шутником для любых символов любого числа (*), ничем.

    Это (ubstitute) / FROM / TO / 'с TO пустым, что означает «удалить все из первого (поскольку sed по умолчанию жадный) двоеточие (до конца строки, так как sed хорошо работает со всеми строками).

    Конечно, cut – прекрасная команда, но я бы сказал, что это другая семья.

    В вашем примере все 3 имени имеют одинаковую длину. В таких случаях, которые могут произойти, но не очень вероятно с / etc / passwd, вы также можете использовать colrm:

     echo "user1:x:1:4 > user2:x:2:5 > user3:x:3:6" | colrm 6 user1 user2 user3 

    или, конечно же,

     cat FILE | colrm 6 

    (редкий случай, когда useless use of cat не применяется, потому что вы не можете передать кол-во ФАЙЛА, чтобы действовать как параметр.)

    Для полноты нет необходимости в внешних командах, оболочка (оболочка Bourne или совместимая) может обрабатывать ее самостоятельно:

     while IFS=':' read -r needed garbage; do echo "$needed"; done < input_file 

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

    Interesting Posts

    NGINX: контролировать доступ к местоположению с помощью auth_basic и auth_ldap?

    Как определить долю samba, чтобы каждый пользователь мог видеть только свой дом?

    Установите параметры монтирования по умолчанию для usb

    Почему sudo -E не поддерживает переменную среды $ HOME?

    Выполнение задания Cron при удалении

    Debian: GPG не может получить ключ ядра Linux

    Ubuntu говорит, что дисковое пространство исчерпано. Нет доступа к терминалу. Вход только гостя. КАК я могу стереть дисковое пространство сейчас?

    настройка setxkbmap для изменения одного пользователя / отладки xkbmap

    Автозаполнение имени файла в каталоге

    Строительство с sbuild и backports

    iptables: как разрешить трафик с перенаправленного порта

    Различное поведение fakechroot на Fedora и Ubuntu

    Есть ли способ узнать, какие веб-страницы доступны клиенту на веб-сервере UNIX?

    Автозаполнение Bash: файлы первого списка затем циклически проходят через них

    Не удается достичь внешней сети или IP после обновления до Ubuntu 12.04

    Linux и Unix - лучшая ОС в мире.