Что касается получения позиции !
в строке, которая соответствует Oh look!
регулярному выражению, просто:
awk -F'!' '/Oh look!/{ print length($1) + 1; quit }' "$file"
Вы также можете выполнить расчет по своему вкусу, поэтому с вашим исходным кодом я думаю это будет:
awk -F':' '/^[[:space:]][A-Z]/{ print length($1) - 2; quit }' "$file"
Можно ли комбинировать раскрытие параметров с выражениями арифметических c в bash?
Для вычисления ${#substr}
у вас должна быть подстрока. Таким образом, вы можете:
substr=${lines[lineNum-1]%%.*}; numChar=$((${#substr} - 2))
Вы также можете отредактировать свой grep
и сделать фильтрацию из Y
с помощью bash
, но awk
будет быстрее:
IFS=Y read -r line _ < <(grep -m1 'Oh look!' "$file")
numChar=$((${#line} - 2))
Тем не менее, вы можете объединить 3 строки в:
numChar=$(( $(<<<${lines[lineNum - 1]%%Y*} wc -c) - 1))