2016-04-27 12 views
1

私はこれらのような文字列を持っている:セッド無効な範囲の終了

volume 5 

vol. 5 

V. 5 

v. 5 

私はこのフォーマットにそれらを有効にしようとしている:このsedコマンドで

\textbf{5} 

s/\(v[a-Z]*[.]*\) \([0-9]*\)/\1 \\textbf{\2}/ 

が、私はinvalid range endを得続けます。 0-9の範囲で何か問題がありますか?

+0

'aZ'は'-はZa - でなければなりません。また、あなたは、大文字と小文字を区別しないパターンを必要とし、/i修飾子を追加Z' – anubhava

+0

多分http://ideone.com/vajhPy? –

+0

LANG変数はどのように設定されていますか? en_US.UTF-8(Cならば)に設定してみてください。 –

答えて

2

ASCIIテーブルをチェックすると、aの値がZの値よりも高いことがわかります。これは無効な範囲を作成します。

echo 'volume 5' | sed 's/\(v[a-z]*[.]*\) \([0-9]*\)/\1 \\textbf{\2}/i' 
echo 'vol. 5' | sed 's/\(v[a-z]*[.]*\) \([0-9]*\)/\1 \\textbf{\2}/i' 
echo 'V. 5' | sed 's/\(v[a-z]*[.]*\) \([0-9]*\)/\1 \\textbf{\2}/i' 
echo 'v. 5' | sed 's/\(v[a-z]*[.]*\) \([0-9]*\)/\1 \\textbf{\2}/i' 

produces

volume \textbf{5} 
vol. \textbf{5} 
V. \textbf{5} 
v. \textbf{5} 
+0

あなたはデモを見ることができます、それは動作します。 –

+0

'[A-z]' => '[a-zA-Z]'を変更して、問題が解決しました。ありがとうございます! –

1

これは私の仕事::

sed -r "s/([vV][a-zA-Z]*[.]*) ([0-9]*)/\1 \\\textbf{\2}/"