sed匹配以*和//开头的行

时间:2011-04-04 22:09:22

标签: linux unicode sed string-matching

我想转换一些java文件并将umlautsÖ,ä和ü替换为unicode。

这是我的sed专栏:

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

情形:

在sed之前看起来像:

# 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 个答案:

答案 0 :(得分:2)

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的评论。一个真正的忍者编辑!

答案 1 :(得分:0)

sed使用基本的正则表达式,因此您必须将(写为\(,将|写为\|