Sed не активируется в сценарии оболочки - PullRequest
1 голос
/ 04 октября 2011

Ни один из моих вызовов sed не активируется в документе. Я проверил и дважды проверил регулярное выражение, оно работает во всех доступных мне текстовых редакторах (Geany, Gedit, Notepad ++), у кого-нибудь есть мысли о том, что я делаю неправильно?

#!/bin/sh
clear
antiword q.doc > q.txt
sed -i -e's/\[.*\]//g' q.txt # replace [...] with nothing
sed -i -e's/^[ \t]+[o][ \t]//g' q.txt # replace old word UL with nothing
sed -i -e's/^[ \t]+[•][ \t]//g' q.txt # replace old word UL with nothing

Бонусные отметки за то, что я показал, как убрать дополнительные возвраты в файл, так что между элементами, которые ранее имели 2 или более, всегда есть только 1 строка.

Ответы [ 2 ]

3 голосов
/ 04 октября 2011

Похоже, вы написали свое регулярное выражение с использованием синтаксиса Perl или расширенного синтаксиса регулярного выражения, но sed использует базовые регулярные выражения . В зависимости от реализации sed, которую вы используете, простейшим решением будет сказать sed использовать расширенные регулярные выражения с флагом -E (Mac OS X) или -r (GNU sed). Вам также может понадобиться сделать \t s буквальными вкладками.

1 голос
/ 04 октября 2011

Если вы используете GNU-sed:

Строка 1) Хорошо работает здесь (удаляет парные квадратные скобки и все, что между ними). ​​

Строка 2 и 3) (

Из справочной страницы для [ списка ]: символы $, ,., [И \ обычно не являются специальными в списке. Например, [*] соответствует ‘\’ или ‘’, поскольку \ не особенный здесь.

Решение: вместо [ \t] код: [:space:]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...