#bash
#bash
Вопрос:
Я работаю со скриптом bash. Есть файл, а внутри файла он выглядит так:
Hello /hi/12349/Jane?
Hello /hi/123?=Jane/
Hello /hey/123450/Jane
Hello /hi/123/Jane
И я хочу извлечь любые цифры между «Hello / hi /» и «/», а между «Hello / hi /» и «/» должны быть только цифры.
Итак, в этом случае результат, который я хочу, это:
12349
123
Я пробовал это:
cat file.txt | grep -o -P '(?>=Hello /hi/).*(?=/)'
Но то, что я пробовал, распечатало все после «Привет / привет»: (
Комментарии:
1. Вы должны сделать отступ во входном файле или поместить его между строками с тройными обратными метками, чтобы создать блоки кода; в противном случае он будет отображаться как markdown, и неясно, как на самом деле выглядит ваш входной файл.
Ответ №1:
Вы можете использовать sed
для этого:
sed -nE 's|^Hello /hi/([0-9][0-9]*)/.*|1|p' file
12349
123
Ответ №2:
С помощью GNU grep:
grep -Po '(?<=^Hello /hi/)[0-9] (?=/)' file.txt
Вывод:
12349 123
Ответ №3:
Извлечение вещей похоже на использование редактора потоков.
sed -n '/Hello /hi/([0-9]*).*//s//1/p' file.txt
Ответ №4:
Другой возможностью является расширенное регулярное выражение ( -E
) …
grep -o -E "[^][a-zA-Z /?=]{1,8}" grep.txt
… в этом случае используется шаблон нежелательных символов и [^]
средств: not
выводит…
12349
123
123450
123