Терминал фильтра шаблона

Мой последний сценарий генерировал txt документ, который включает первые и последние 10 строк /etc/passwd файл. Я хочу отфильтровать эти 20 строк в файл путем показа мне первых 3 слов в *:*:*: (где *=words)

Вот то, что я работал вокруг, и я не мог получить его работа:

#!/bin/bash
echo "**********************************"
echo "Today is: "$(date "+%d%m%Y")
echo "**********************************"
echo "This are the data that last script generated"
echo "**********************************"
echo
echo $(grep *:*:*: /tmp/test-file)
0
задан 14 May 2018 в 00:23

3 ответа

Если необходимо использовать grep можно соответствовать первым трем полям каждой строки с

grep -o '^[^:]*:[^:]*:[^:]*'

Это соответствует началу строки (^), затем все кроме двоеточия : сопровождаемый двоеточием : и т.д. Благодаря -o опция, grep печать только подобранные (непустые) части согласующего отрезка длинной линии, посмотрите man grep. Вот пример с первыми и последними двумя строками /etc/passwd:

$ grep -oh '^[^:]*:[^:]*:[^:]*' <(head -2 /etc/passwd) <(tail -2 /etc/passwd)
root:x:0
daemon:x:1
timidity:x:122
geoclue:x:123

Читайте больше об Основных регулярных выражениях (BRE), используемых здесь на https://www.regular-expressions.info/gnu.html.

2
ответ дан 29 October 2019 в 08:21

С тех пор /etc/passwd список полей, разделенных стабильным разделителем (во многом как CSV), необходимо использовать команды, которые могут работать с ними, как cut или awk (для более сложных операций).

В этом случае, cut достаточно:

cut -d: -f-3

Объяснение:

  • Флаг -d устанавливает разделитель (или разделитель полей). Мы хотим : здесь.
  • Флаг -f выбирает поля для печати. -3 означает “до 3-го столбца”.

Пример:

$ cut -d: -f-3 /etc/passwd | head
root:x:0
daemon:x:1
bin:x:2
sys:x:3
sync:x:4
games:x:5
man:x:6
lp:x:7
mail:x:8
news:x:9

Между прочим, это является лишним для издания echo $(command). Используйте command непосредственно.

3
ответ дан 29 October 2019 в 08:21

Используя awk:

$ awk -F: 'NR<=20 && NF=3' /etc/passwd
root x 0
daemon x 1
bin x 2
sys x 3
sync x 4
games x 5
...
  • если NR<=20 (NR=number регистра) и
  • ... после установки NF к 3 (NF=number полей)
  • ... распечатайте его (действие по умолчанию)

Извините за подлость ☺

1
ответ дан 29 October 2019 в 08:21

Другие вопросы по тегам:

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