Как получить столбец после второй трубы
Пример:
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