Пример:
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
Используйте 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
Может быть, awk лучше подходит для этого использования:
awk 'BEGIN { FS = "|" } ; { print $3 }'
Если вам нужно извлечь более одного поля из такого ввода, я думаю, что проще всего использовать awk.
(ВЫКЛ: извините, если я указал в неловком направлении)
Почему 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
Просто для забавы, вот как вы можете сделать это с помощью grep
и tr
:
<infile grep -Eo '^([^|]+\|){3}' | grep -Eo '[^|]+\|$' | tr -d '|'
Первое регулярное выражение захватывает первые три поля с разделителями. Второй grep выбирает последнее поле, а tr удаляет оставшийся разделитель.
Просто представьте, что ваш контент присутствует в этом файле 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 root
Чтобы вырезать second
поле, используйте f2
[max@localhost ~]$ cut -d ":" -f2 file1 x
Чтобы вырезать third
поле, используйте f3
[max@localhost ~]$ cut -d ":" -f3 file1 0