使用sed的大小写

时间:2009-03-27 11:59:38

标签: regex sed

我想更改以下模式:

getFoo_Bar

为:

getFoo_bar

(注意下面的b)

既不知道foo也不知道bar,替换模式是什么?

我开始写作

sed 's/\(get[A-Z][A-Za-z0-9]*_\)\([A-Z]\)/\1

但是我被困了:我想写“\ 2小写”,我该怎么做?

也许sed不适合?

8 个答案:

答案 0 :(得分:33)

使用sed将getFoo_Bar更改为getFoo_bar:

echo "getFoo_Bar" | sed 's/^\(.\{7\}\)\(.\)\(.*\)$/\1\l\2\3/'

大写和小写字母由:

处理
  • \U使所有文字都为正确的大写字母。
  • \u只使第一个字符为右大写字母。
  • \L将所有文字设为右下角。
  • \l仅将第一个字符设为右下方。 (注意它是一个小写字母L)

该示例只是一种模式匹配方法,仅基于修改单个文本块。使用该示例,getFoo_BAr转换为getFoo_bAr,请注意A未被更改。

答案 1 :(得分:25)

s/\(get[A-Z][A-Za-z0-9]*_\)\([A-Z]\)/\1\L\2/g

测试:

$ echo 'getFoo_Bar' | sed -e 's/\(get[A-Z][A-Za-z0-9]*_\)\([A-Z]\)/\1\L\2/g'
getFoo_bar

答案 2 :(得分:7)

有点短:

echo getFoo_Bar | sed 's/_\(.\)/_\L\1/'

答案 3 :(得分:6)

最短的我可以想出:

echo getFoo_Bar | sed 's/_./\L&/'

答案 4 :(得分:1)

你可以使用perl:

perl -pe 's/(get[A-Z][A-Za-z0-9]*)_([A-Z])/\1_\l\2/'

\ l这就是诀窍。

sed不会在匹配的组上执行大写/小写。

答案 5 :(得分:0)

答案 6 :(得分:0)

如果你想在下划线之后用小写字母写一切,那么这对你有用:

echo getFoo_Bar | gawk -F_ '{print tolower($2)}'

答案 7 :(得分:-2)

echo getFoo_Bar | sed 's/[Bb]/\L&/g'