sed: не может соответствовать шаблону к строке

Если у меня есть сценарий sed, как это:

 35185222p

И запустить его как:

sed -n -f seddy.sed infile.xml

Он правильно печатает хитрую строку XML, которую я хочу исправить.

Если я изменю свой сценарий на:

 35185222s@^.*$@<load address='11b38c56' size='08' />@p

Это не соответствует (то есть, никакой вывод не сделан). Что я не так понял?

ОК: Я думаю, что я понимаю это сейчас - к сожалению, искажение в этой строке в оригинальном файле означает, что символы не будут соответствовать . - так как мне это исправить?

Дальнейшее обновление Вот как выглядит строка, когда я ее вырезал и вставил:

  <load address='11c1�����ze='08' />

3 ответа

Решение

Реальная проблема, кажется, столкновение языков.

Бег

LANG=c sed -f seddy.sed input.xml

Исправляет проблему. Конечно, я мог бы использовать c команда вместо

Попробуй сед c Команда для изменения содержимого строки:

35185222c\<load address='11b38c56' size='08' />

Я, честно говоря, не знаю, почему регулярное выражение ^.*$ не будет соответствовать на этой линии. Я предполагаю, что это как-то связано с вашей локалью и кодировкой символов, но похоже, что в любом случае это ошибка.

35185222s@[^].*[$]@<load address='11b38c56' size='08' />@p

^ и $ следует экранировать или, по крайней мере, между [ ], если нет, то используется значение (^ = начало, $ = конец), и нет ничего до начала или после конца.

будьте осторожны также с ', это зависит от вашего разделителя строк от вашего седа и должен быть тоже сбежал

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