2013-09-18 2 views
2

У меня странная проблема, для которой я не вижу никаких объяснений. У меня есть файл со следующим содержанием:sed отказывается заменить шаблон -> файл (кодирование) ошибки?

<[email protected]:~> head -n 2 myfile 
f800671 1 V80068 0.000 2.262 DUMMY heeft één van hen niet gezegd 
f800671 1 V80068 2.262 4.090 DUMMY la*v Belgique*v sera*v latine*v 

Я хочу, чтобы удалить все * V (иностранные слова) маркеры следующим образом:

<[email protected]:~> head -n 2 myfile | sed 's/*v//' 
f800671 1 V80068 0.000 2.262 DUMMY heeft één van hen niet gezegd 
f800671 1 V80068 2.262 4.090 DUMMY la*v Belgique*v sera*v latine*v 

Нет счастья там. Команда sed кажется правильной. Это основная команда, поэтому не сильно рисковать, но я все равно проверил:

echo "Belgique*v" | sed 's/*v//' 
Belgique 

Я полагаю, что есть что-то не так с файлом, но я честно не могу себе представить, что. Я проверил кодировку, и это простой текст ISO-8859.

Любые идеи?

ответ

2

Побег * и использовать g флаг для глобальной замены:

sed 's/\*v//g' 

Edit:

* означает 'ноль или более предшествующему'. Отключайте это особое значение, вы должны избегать его как \*.

Флаг g заменяет все вступлений. Если вы не установили этот флаг, будет заменено только в начале.

+1

Хорошо, я идиот, или я должен был хотя бы получить кофе первым. Я полностью забыл о флагове g. – niefpaarschoenen

+2

'*' не является особым как первый символ, по крайней мере, в моей версии 'sed'. Не нужно избегать этого, но я согласен, что это хорошая привычка. – Birei

+0

@Birei Вы правы, я никогда этого не замечал. –

Смежные вопросы