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
^ и $ следует экранировать или, по крайней мере, между [ ], если нет, то используется значение (^ = начало, $ = конец), и нет ничего до начала или после конца.
будьте осторожны также с ', это зависит от вашего разделителя строк от вашего седа и должен быть тоже сбежал