У меня есть текстовый файл, который имеет 60 позиций символа. Я хочу смочь искать значение/слово, вводимое пользователем в положения 05-12. Как я иду о выполнении этого, не используя awk, жемчуга, и т.д.?
Например, текстовый файл
commA6314 ifosfamide 30 12
home5341209 urokinase 6314 37
И если кто-то вводит 6314
, затем это произвело бы строку
commA6314 ifosfamide 30 12
Я думал об использовании grep
, но не слишком уверенный. Какая-либо справка?
Вы могли использовать
grep -E "^.{4}.?.?.?.?.?.?.?$pattern"
где $pattern
ввод данных пользователем, я имею в виду в чем-то как
$ echo "enter a pattern: "; read pattern; grep -E "^.{4}.?.?.?.?.?.?.?$pattern" file
enter a pattern:
6314
commA6314 ifosfamide 30 12
^.{4}.?.?.?.?.?.?.?
это - первые 4 заблокированные символа, затем следующие 7 символов являются дополнительными, означая, является ли шаблон только одним символом, и это находится в 12-м положении, было бы найдено, и если бы это - 7 символов и начинает с 5-го положения, это было бы все еще найдено.
^
запустите строки.
любой символ{4}
четыре из предшествующего символа?
нуль или один из предшествующего символа Bash позволяет извлекать подстроки определенной переменной. Все, что необходимо сделать, является файлом чтения линию за линией в while IFS= read -r
структура:
#!/bin/bash
while IFS= read -r line;
do
if [[ ${line:5:12} =~ "$1" ]];
then
echo "$line"
fi
done < "$2"
Примечание синтаксис: в ${var:5:12}
5 стартовая позиция, и 12 смещается, так в этом случае она ищет от символьного положения 5 до 17. Если необходимо вычислить смещение на основе входа пользователя, можно использовать арифметику удара для определения смещения как end=$((12-5))
и использование что переменная в рамках выражения подстроки как ${var:5:$end}
Тестовый прогон:
$ ./search_substrings.sh "6314" input.txt
commA6314 ifosfamide 30 12
Примечание, что это избегает использования внешних инструментов как grep
, который придерживается требований, хотя имеют в виду, это не очень практическое решение, и в реальном мире Вы использовали бы Perl
или awk