使用sed的大小写

cad*_*ian 21 regex sed

我想改变以下模式:

getFoo_Bar
Run Code Online (Sandbox Code Playgroud)

至:

getFoo_bar
Run Code Online (Sandbox Code Playgroud)

(注意下面的b)

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

我开始写作了

sed 's/\(get[A-Z][A-Za-z0-9]*_\)\([A-Z]\)/\1
Run Code Online (Sandbox Code Playgroud)

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

也许sed不适应?

小智 34

要使用sed将getFoo_Bar更改为getFoo_bar:

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

大写和小写字母由以下处理:

  • \U 使所有文本都为正确的大写.
  • \u 只使第一个字符为右大写.
  • \L 使所有文本向右小写.
  • \l仅使第一个字符出现在右下角.(注意它是一个小写字母L)

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

  • 来自http://www.gnu.org/software/sed/manual/sed.html:`\ E` _Stop案例转换由_`\L` _或_`\U`开始. (5认同)
  • 这给了我带有mac 10.8默认sed的getFoo_lBar.我猜mac不会处理\ L或\ l (3认同)
  • 这是一个很好的答案,远远超出回答原始问题.它提供了有关在sed中处理各种案例转换任务的参考信息.为我节省了大量的研究时间.谢谢! (2认同)

str*_*ger 25

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

测试:

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

  • 请注意,此解决方案仅适用于GNU sed.POSIX sed中没有`\ l` /`\ L` /`\ u` /`\ U` /`\ E`.在这种情况下你可以使用perl(参见[@ user83591对这个问题的回答](http://stackoverflow.com/a/689620/2451238))或awk(参见[我对另一个问题的回答](http:// stackoverflow)的.com /一个/二百四十五万一千二百三十八分之一千八百二十九万八千八百八十二)). (9认同)

kal*_*nji 7

有点短:

echo getFoo_Bar | sed 's/_\(.\)/_\L\1/'
Run Code Online (Sandbox Code Playgroud)


小智 5

最短的我可以想出:

echo getFoo_Bar | sed 's/_./\L&/'
Run Code Online (Sandbox Code Playgroud)