Как получить столбец после второй трубы

Пример:

3|100|test@test.com|0|0|6:1,10,11,12,13,2,3,4,5,6,9|7:1,10,11,13,16,2,4,5,6,9|

Ожидаемый вид после grep:

test@test.com

5 ответов

Решение

Использование cut:

$ echo '3|100|test@test.com|0|0|6:1,10,11,12,13,2,3,4,5,6,9|7:1,10,11,13,16,2,4,5,6,9|' |\
cut -d'|' -f3
test@test.com

Почему grep? использование cut

echo "3|100|test@test.com|0|0|6:1,10,11,12,13,2,3,4,5,6,9|7:1,10,11,13,16,2,4,5,6,9|" | cut -d '|' -f 3

Может быть, awk лучше подходит для этого использования:

awk 'BEGIN { FS = "|" } ; { print $3 }'

Если вам нужно извлечь более одного поля из такого ввода, я думаю, что проще всего использовать awk.

(ВЫКЛ: извините, если я указал в неловком направлении)

Просто для удовольствия, вот как вы могли бы сделать это с grep а также tr:

<infile grep -Eo '^([^|]+\|){3}' | grep -Eo '[^|]+\|$' | tr -d '|'

Первое регулярное выражение захватывает первые три поля с разделителями. Второй grep выбирает последнее поле, а t r удаляет оставшийся разделитель.

Просто представьте, что ваш контент присутствует в этом файле file1

[max@localhost ~]$ cat file1 3|100|test@test.com|0|0|6:1,10,11,12,13,2,3,4,5,6,9|7:1,10,11,13,16,2,4,5,6,9|

Вырезать third поле использовать эту команду

[max @ localhost ~] $ cut -d "|" -f3 file1

test@test.com

Вот

-d: указывает на использование символа | в качестве разделителя

-f1: напечатать первое поле, если вы хотите напечатать второе поле, использовать -f2, в третьем поле использовать -f3 и так далее...

предполагать file1 содержание так

[max @ localhost ~] $ cat file1

корень: х: 0: 0: корень:/ корень:/ Bin/ Баш

Тогда мы должны использовать : как разделитель, как это

Вырезать first использование поля f1

[max @ localhost ~] $ cut -d ":" -f1 file1
корень

Вырезать second полевое использование f2

[max @ localhost ~] $ cut -d ":" -f2 file1
Икс

Вырезать third полевое использование f3

[max @ localhost ~] $ cut -d ":" -f3 file1
0
Другие вопросы по тегам