sed совпадающие строки, начинающиеся с * и // - PullRequest
1 голос
/ 05 апреля 2011

Я хочу конвертировать некоторые java-файлы и заменить умлауты Ö, ä и ü на юникод.

Вот моя строка sed:

sed -i '{ /^(#|\*$)/!s/0xE4/0xE4/g;/#/!s/Ä/0xC4/g;/#/!s/ö/0xF6/g;/#/!s/Ö/0xD6/g;/#/!s/ü/0xFC/g;/#/!s/Ü/0xDC/g; }' 

сценарий:

ДоЭто выглядит так:

# comment with umlauts ÄÄÄÄÄÄÖÖÖÖÖ

ÖÖÖÖÖÖÖÖÖ

// comment with umlauts ÄÄÄÄÄÄÖÖÖÖÖ

 Text text text ÄÄÄÄÄÖÖÖÖÖ

/*
 * comment with umlauts ÄÄÄÄÄÄÖÖÖÖÖ
 */

После того, как это должно выглядеть так:

 # comment with umlauts ÄÄÄÄÄÄÖÖÖÖÖ

 0xD60xD60xD60xD60xD60xD60xD60xD60xD60xD60xD60xD6

// comment with umlauts ÄÄÄÄÄÄÖÖÖÖÖ

 Text text text 0xC40xC40xC40xC40xC40xD60xD60xD60xD60xD6


/*
 * comment with umlauts ÄÄÄÄÄÄÖÖÖÖÖ
 */

Может ли кто-нибудь помочь мне с соответствием?- У меня есть, но это не работает правильно:

/^(#|\*$)/!

Ответы [ 2 ]

2 голосов
/ 05 апреля 2011

Posix sed

sed '\%^ *\(#\|//\|\*\|/\*\)%!{
 s/Ä/0xC4/g
 s/ö/0xF6/g
 s/Ö/0xD6/g
 s/ü/0xFC/g
 s/Ü/0xDC/g
}'

GNU sed

sed -r '\%^ *(#|//|\*|/\*)%!{
 s/Ä/0xC4/g
 s/ö/0xF6/g
 s/Ö/0xD6/g
 s/ü/0xFC/g
 s/Ü/0xDC/g
}'

Обновлено с комментариями ninjalj.Фактическое редактирование ниндзя!

0 голосов
/ 05 апреля 2011

sed использует основные регулярные выражения, поэтому вы должны написать ( как \( и | как \|.

...