Итак, я знаю, что существуют инструменты для этой проблемы, потому что я слышал о них, но я не знаю, что это такое.
Я хочу сделать что-то вроде отфильтровать все данные, кроме имен пользователей в / etc / passwd.
Например, я хотел бы получить user1, user2 и user3 из следующего файла. В этом случае логика может быть «Захватывать текст до первого символа«: »в каждой строке файла».
user1:x:1:4
user2:x:2:5
user3:x:3:6
Выход будет:
user1
user2
user3
awk
берет имя файла, так что вы можете пропустить канал и просто сделатьawk -F: '{print $1}' /etc/passwd
tr
иat
является парой примеров из нескольких вещей, которые этого не делают).Вот Perl с одним вкладышем:
источник
Под perl и awk есть третий инструмент для таких работ, который sed:
Это команда подстановки: замена от двоеточия:, за которой следует точка, которая является джокером для символов любого типа, любого количества (*), без нуля.
Это (ubstitute) / FROM / TO / 'с пустым значением TO, что означает' удалить все с первого (поскольку по умолчанию sed является жадным) двоеточия (до конца строки, поскольку sed хорошо работает со всеми строками).
Конечно,
cut
это хорошая команда, но я бы сказал, из другой семьи.источник
В вашем примере все 3 имени имеют одинаковую длину. В таких случаях - что может случиться, но не так часто с / etc / passwd - вы также можете использовать colrm:
или, конечно
(редкий случай, когда
useless use of cat
это не применимо, потому что вы не можете передать файл FIL в качестве параметра.)источник
cat
там все еще бесполезноcolrm 6 < FILE
.cat foo | grep bar
.Просто для полноты, нет необходимости во внешних командах, оболочка (Bourne или совместимая) может обрабатывать ее самостоятельно:
Конечно, это, вероятно, самое медленное из всех возможных решений, поэтому для огромных файлов выберите другое.
источник