Обнаружение ошибки в моей команде sed

Я создаю команду для замены всех экземпляров с ; f. на , (frequent).. Таким образом, я написал sed -i 's:;[:space:]f.:,[:space:](frequent).:g' без каких-либо изменений, а затем написал sed -i 's:; f.:, (frequent).:g', чтобы найти только то, что он заменяет все экземпляры f, которые были записаны после ;, поэтому его обращение ; find к , (frequent).ind

Любой, пожалуйста, дайте мне знать о моей вине и как исправить ее?

0
задан 5 June 2013 в 15:59

1 ответ

Проблема в первом случае заключается в кавычках: если вы хотите использовать : в качестве разделителя, вы не можете использовать его без кавычек в символьных пространствах. Кроме того, . имеет особое значение в регулярном выражении - оно соответствует любому символу. Чтобы соответствовать буквальной точке, используйте \.. Кроме того, [:space:] должно использоваться внутри класса символов, поэтому вы должны использовать [[:space:]]. Наконец, классы символов не имеют значения в замещающей части выражения.

Это должно работать:

sed 's/;[[:space:]]f\./, (frequent)./g'
0
ответ дан 5 June 2013 в 15:59

Другие вопросы по тегам:

Похожие вопросы: