Как (в сценарии оболочки )получить позицию подстроки, содержащей двойные кавычки?

Необходимо заменить Keep-Downloaded-Packagesнаapt:

Binary::apt::APT::Keep-Downloaded-Packages "1";

в apt.confили фрагмент /etc/apt.conf.d/, например.

echo 'Binary::apt::APT::Keep-Downloaded-Packages "1";' | sudo tee /etc/apt/apt.conf.d/10apt-keep-downloads

(aptна самом деле не выполняет «автоочистку», не сохраняет загруженные пакеты.)

1
28.01.2021, 06:21
3 ответа

Посмотрим, это то, что вы ищете:

mystr='a very, very, extremely, incredibly long string of text that contains the phrase he said, "Hello!" somewhere in the middle'

$ var=$(echo "$mystr" | grep -o -b "Hello!" | head -1)
$ echo "$var"
91:Hello!
$ pos="${var%:*}"
$ echo "$pos"
91
1
18.03.2021, 22:34

Я думаю, что он ищет символы второй строки в первой. Вы можете использовать grep

mystr='a very, very, extremely, incredibly long string of text that contains 2 the phrase he said, "Hello!" somewhere in the middle'
echo "$mystr"| grep -o -b Hello!

Он вернется 91:Hello!. Здесь индексация начинается с 0.

Если таких вхождений, как a, несколько, вывод будет

0:a 58:a 65:a 77:a 85:a

Если вы также хотите искать двойные кавычки, избегайте их,

echo "$mystr"| grep -o -b \"Hello!\"

Вывод будет

90:"Hello!"
2
18.03.2021, 22:34

Только с расширением параметров:

mystr='a very, very, extremely, incredibly long string of text that contains the phrase he said, "Hello!" somewhere in the middle'  
searchstr='"Hello!"'
newstr="${mystr%%$searchstr*}"
echo "position = $((${#newstr} + 1))"
1
18.03.2021, 22:34

Теги

Похожие вопросы