1

Пример:

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 ответов5

7

Используйте 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
4

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

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

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

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

3

Почему 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
1

Просто для забавы, вот как вы можете сделать это с помощью grep и tr:

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

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

1

Просто представьте, что ваш контент присутствует в этом файле 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .