Как выбрать и вывести текст в строке

Мне нужно выбрать и вывести в файл текст, содержащийся в определенной строке.

Предположим, что строка: ABCDEFGHIJKLMNOP

Какая команда будет извлекать то, что после ABCDEF и до K? (т.е. только GHIJ) в другой файл?

Я пытался с командой grep, но из-за моего плохого понимания его сложности он терпел неудачу каждый раз. Я должен упустить что-то очень основное.

Заранее большое спасибо.

Я предполагаю, что вы программируете с помощью оболочки, например bash .

Вам понадобится sed .

например

 sed -re 's/^ABCDEF(.*)K.*/\1/' 

Это использует grep для поиска и замены s/thing to find as regexp/thing to replace it with/

\1 означает замену на первое выражение в квадратных скобках.

При поиске совпадения grep печатает всю согласованную строку. Чтобы напечатать только согласованный текст, вы можете использовать ключ -o . Но это печатает целую строку в строке. Чтобы сделать печать, что вам нужно, вы должны использовать утверждения look-behind и look-ahead . Для этого требуется grep с поддержкой PCRE.

 > grep -Po '(?<=ABCDEF).+(?=K)' <<< 'ABCDEFGHIJKL' GHIJ 

Объяснение:

  • -P Включить совместимое с perl регулярное выражение
  • -o Печатать только согласованный текст, а не целую строку
  • (?<=ABCDEF) Положительное утверждение для соответствия ABCDEF
  • (?=K) Положительное утверждение для сопоставления K
  • .+ Сопоставьте все между вышеуказанными утверждениями

В любом из выпусков решений нет ничего плохого, но вы можете сделать это в чистом Bash, если хотите.

Учитывая строку с вашим значением:

 echo $myStr ABCDEFGHIJKLMNOP 

Ты можешь сделать:

 echo $(expr match "$myStr" '.*F\(.*\)K.*') GHIJ