regex - 进行各种替换,但只能在字符之前

标签 regex bash awk sed

我正在做这样的事情:

echo 'foo_bar_baz=foo_bar_baz' | sed -r 's/_([[:alnum:]])/\U\1/g'

并得到结果:

fooBarBaz=fooBarBaz

有没有办法获取 fooBarBaz=foo_bar_baz 呢?

我尝试这样做,非贪婪:

echo 'foo_bar_baz=foo_bar_baz' | sed -r 's/([^=].*?)_([[:alnum:]])/\1\U\2/g'

但结果是这样的:

foo_bar_baz=foo_barBaz

我需要的是转换自:

foo_bar_baz=foo_bar_baz

到:

fooBarBaz=foo_bar_baz

最佳答案

编辑: 添加更多适用于 = 之前超过 3 个值的通用解决方案。

awk '
BEGIN{
  FS=OFS="="
}
{
  num=split($1,array,"_")
  for(i=2;i<=num;i++){
    val=(val?val:"")toupper(substr(array[i],1,1)) substr(array[i],2)
  }
  $1=array[1] val
  val=""
}
1
'  Input_file


这对 awk 来说应该是一个简单的任务。

echo 'foo_bar_baz=foo_bar_baz' | awk '
BEGIN{
  FS=OFS="="
}
{
  split($1,array,"_")
  $1=array[1] toupper(substr(array[2],1,1)) substr(array[2],2) toupper(substr(array[3],1,1)) substr(array[3],2)
}
1'


在第一部分使用中简单地删除 _(这不会使字母大写):

echo 'foo_bar_baz=foo_bar_baz' | awk 'BEGIN{FS=OFS="="}{gsub(/_/,"",$1)} 1'

关于regex - 进行各种替换,但只能在字符之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58141100/

相关文章:

c# - 从右到左语言中的正则表达式模式匹配

ruby 1.9 : Regular Expressions with unknown input encoding

linux - jar 的可执行 shell 脚本

python - 无法通过 AWK/Python 使每个句子从 LaTex 中的新行开始

linux - 使用awk查找字符串中的第二个、第三个和第四个单词

php - 如何从字符串中的特定文本和字符获取整数(正则表达式/PHP)

regex - msys2中的regex.h(Windows)

bash - 如何将此处文档的输出重定向到文本文件?

python - 同时发送消息python脚本

bash - 生成特殊文件列表