Grep содержимое из TXT-файла с помощью регулярных выражений - PullRequest
1 голос
/ 18 апреля 2019

У меня есть список в текстовом файле, который выглядит следующим образом.

10.9.0.18,tom,34.0.1.2:44395,Thu Apr 18 07:14:20 2019
10.9.0.10,jonas,84.32.45.2:44016,Thu Apr 18 07:16:06 2019
10.9.0.6,philip,23.56.222.3:55202,Thu Apr 18 07:16:06 2019
10.9.0.26,coolguy,12.34.56.7:53316,Thu Apr 18 07:16:06 2019

Я хотел бы иметь сценарий, который дает мне следующий вывод:

Том Джонас Филипп Coolguy

Я былглядя на что-то вроде этого:

grep -oP "^10.9.0.*,wq$1-\K.*" | cut -d, -f1 | sort

Но я не совсем добираюсь туда, вообще ничего не получая.

Ответы [ 4 ]

3 голосов
/ 18 апреля 2019
  1. Извлечь второе поле
  2. Заменить символы новой строки пробелами
cat <<EOF |
10.9.0.18,tom,34.0.1.2:44395,Thu Apr 18 07:14:20 2019
10.9.0.10,jonas,84.32.45.2:44016,Thu Apr 18 07:16:06 2019
10.9.0.6,philip,23.56.222.3:55202,Thu Apr 18 07:16:06 2019
10.9.0.26,coolguy,12.34.56.7:53316,Thu Apr 18 07:16:06 2019
EOF
cut -d, -f2 | tr '\n' ' '
1 голос
/ 18 апреля 2019

Если awk - опция, которую вы можете попробовать:

awk -F, '{printf "%s ", $2} END {print ""}' file.txt

{printf "%s ", $2 запрещает использование новой строки по умолчанию и вместо этого использует пробел.

END {print ""}добавить новую строку после окончания

1 голос
/ 18 апреля 2019

Вы не получаете вывод, потому что grep ничего не возвращает (для этого вам не нужно регулярное выражение perl).

Вам нужно будет выбрать и второе поле:

grep '^10\.9\.0\.' data.txt | cut -d, -f
0 голосов
/ 19 апреля 2019

Это правильный ответ, если вы хотите многострочный вывод:

$ awk -F, '/^10\.9\.0/{print $2}' file
tom
jonas
philip
coolguy

или это для одиночного:

$ awk -F, '/^10\.9\.0/{o=o s $2; s=OFS} END{print o}' file
tom jonas philip coolguy

Вам нужно экранировать . s, поскольку онипредставляет любой символ в регулярном выражении, и вам не нужно добавлять .* в конце регулярного выражения, поскольку это будет буквально соответствовать «что-то или ничего».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...