Я пытался сопоставить первое вхождение текста в строке и удалял его с помощью sed. Но я узнал, что sed является жадным, и он не будет работать для моего случая, и теперь я пытаюсь реализовать то же самое, используя Perl, но он не работает.
cat test.txt
IAM*WRITNG*THIS*TEXT*FOR*SAMPLE*NUMBER*123*345.05*678987*TEST*OF*DATA*WITH*SOME*DUMMY*TEXT*TO*CHECK*WHETHER*IT*WILL*WORK*TEXT*REPEATING
Ожидаемый результат:
IAM*WRITNG*THIS*TO*CHECK*WHETHER*IT*WILL*WORK*TEXT*REPEATING
с SED:
sed -e 's/\(TEXT\*.*\*.*\*.*\*.*\*.*\*678987\).*\(TEXT\*\)/\2/' test.txt
Выход:
IAM*WRITNG*THIS*TEXT*REPEATING
С Perl:
perl -pe 's/\(TEXT\*.*\*.*\*.*\*.*\*.*\*678987\).*?\(TEXT\*\)/\2/' test.txt
Выход:
IAM*WRITNG*THIS*TEXT*FOR*SAMPLE*NUMBER*123*345.05*678987*TEST*OF*DATA*WITH*SOME*DUMMY*TEXT*TO*CHECK*WHETHER*IT*WILL*WORK*TEXT*REPEATING
Может кто-нибудь сообщить мне, в чем заключалась ошибка, которую я делал?
Обновление: я пробовал использовать решение, данное для команды Perl, но оно не работает со строками большей длины. Есть ли способ сделать это с помощью awk?