Я пытаюсь сопоставить два разных регулярных выражения с длинными строками с помощью awk, удаляя ту часть строки, которая совпадает в окне из 35 символов. Проблема в том, что тот же набор кода работает, когда я ищу первый (который совпадает в начале), тогда как не совпадает со вторым (конец строки). Ввод:
Regexp1(1)(2)(3)(4)(5)xxxxxxxxxxxxxxx(20)(21)(22)(23)Regexp2
Требуемый вывод
(1)(2)(3)(4)(5)xxxxxxxxxxxxxxx(20)(21)(22)(23)
До сих пор я использовал этот код, который правильно извлекает Regexp1, но, к сожалению, не может извлечь также Regexp2, так как проиндексирован RSTART и RLENGTHдля Regexp2 неверны. Код для извлечения Regexp1 (правильный вывод):
awk -v F="Regexp1" '{if (match(substr($1,1,35),F)) print substr($1,RSTART,RLENGTH)}' file
Код для извлечения Regexp2 (неправильный вывод)
awk -v F="Regexp2" '{if (match(substr($1,length($1)-35,35),F)) print substr($1,RSTART,RLENGTH)}' file
Несмотря на то, что индексы для Regexp1 верны, для Regexp2 индексы wrond (RSTART= 13). Я не могу понять, как извлечь второе регулярное выражение.