У меня есть этот тип текста:Почему это рабочее регулярное выражение не работает с sed?
Song of Solomon 1:1: The song of songs, which is Solomon’s.
John 3:16:For God so loved the world, that he gave his only begotten Son, that whosoever believeth in him should not perish, but have everlasting life.
III John 1:8: We therefore ought to receive such, that we might be fellowhelpers to the truth.
Я пытаюсь удалить стих (или метаданные, если вы будете) и просто получить простой текст содержания. В тексте примера показаны три разных типа стихов (многословное, однослоговое и римское + слово), я думал, что с начала каждой строки будет легче обнаружить , что угодно до тех пор, пока «число: число:», а затем замените его с "" (пустая строка).
Я проверил регулярное выражение, которое, кажется, работает (как я описал):
- Сначала не найти, пока ": Номер:" за исключением его [или:.? + (= (\ S +) (\ d +) (:) (\ d +) (:))],
- Затем укажите шаблон «число: число:» [или: (\ s +) (\ d +) (:) (\ d +) (:) ]
Это приводит к следующему регулярному выражению:
.+?(?=(\s+)(\d+)(:)(\d+)(:))(\s+)(\d+)(:)(\d+)(:)
Регулярное выражение, кажется, работает хорошо, вы можете попробовать его here, проблема в том, что, когда я пытаюсь использовать регулярное выражение с СЭД он просто не работает:
$ sed 's/.+?(?=(\s+)(\d+)(:)(\d+)(:))(\s+)(\d+)(:)(\d+)(:)//g' testcase.txt
Он будет производить тот же текст в качестве входных данных, когда оно должно произвести:
The song of songs, which is Solomon’s.
For God so loved the world, that he gave his only begotten Son, that whosoever believeth in him should not perish, but have everlasting life.
We therefore ought to receive such, that we might be fellowhelpers to the truth.
Любая помощь пожалуйста?
спасибо!
попытка :: СЕПГ -i «s /. +() = (\ s +) (\ d +) (:) (\ d +) (:))/(\ s +) (\ d +) (:) (\ d +) (:)/g ' –
'\ s' и' \ d' являются и PCRE. Стандартный POSIX sed не знает PCRE. –
(Таким образом, @AlexisPeters, который не будет работать со многими/всеми версиями sed). –