sed
- это собственный "язык" со своими командами. Это не «инструмент регулярных выражений», а скорее «редактор потока».
Я знаком с флагами регулярных выражений g и m,
s
команда имеет собственные модификаторы, а m
- это расширение GNU. Я не совсем понимаю, как это используется здесь, поскольку sed
читает здесь по одной строке за раз, а m
изменяет поведение ^
и $
....
Но в данном конкретном контексте, что это означает?
В любом возможном контексте команда t
переходит к метке, если (любая) команда s///
была успешной. Если метка не указана, выполняется переход к концу скрипта.
Команда d
удаляет пространство шаблонов, эффективно удаляя строку при типичном синтаксическом анализе.
t;d
- мнемоник c, чтобы удалить строку, если последняя команда s
не удалась. Я предпочитаю делать /pattern/!d; s//replacement/g
, что более читабельно для моих глаз.
Ссылкой на поведение sed будет документация posix sed и документация gnu sed .