Sed无效范围结束

时间:2016-04-27 22:31:00

标签: regex sed

我有这样的字符串:

volume 5

vol. 5

V. 5

v. 5

我正试图将它们变成这种格式:

\textbf{5}

使用此sed命令

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

但我一直在invalid range end。我在0-9范围内做错了吗?

2 个答案:

答案 0 :(得分:3)

如果您检查ASCII表,您会发现a值高于Z的值。这会创建无效范围。此外,您需要一个不区分大小写的模式,添加/i修饰符:

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}

答案 1 :(得分:1)

这对我有用:

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