Bash 如何将一行转换为驼峰大小写?
这将在模式匹配后拾取单行上的所有文本,并使用非字母数字作为分隔符将其转换为驼峰大小写,删除结果字符串开头和结尾的空格,(1)如果它有两个连续的非字母数字字符,则不会替换,例如下面的示例中的“2”。(2)是否有一种方法可以使用sed命令而不是使用grep、cut、sed和tr来执行所有操作Bash 如何将一行转换为驼峰大小写?,bash,shell,sed,Bash,Shell,Sed,这将在模式匹配后拾取单行上的所有文本,并使用非字母数字作为分隔符将其转换为驼峰大小写,删除结果字符串开头和结尾的空格,(1)如果它有两个连续的非字母数字字符,则不会替换,例如下面的示例中的“2”。(2)是否有一种方法可以使用sed命令而不是使用grep、cut、sed和tr来执行所有操作 $ echo " hello world title: this is-the_test string with number 2, to-test CAMEL String end! " | grep
$ echo " hello
world
title: this is-the_test string with number 2, to-test CAMEL String
end! " | grep -o 'title:.*' | cut -f2 -d: | sed -r 's/([^[:alnum:]])([0-9a-zA-Z])/\U\2/g' | tr -d ' '
ThisIsTheTestStringWithNumber2,ToTestCAMELString
要回答您的第一个问题,请将
[^[:alnum:]
更改为[^[^[:alnum:]+
多加工一个或多个非alnum字符
您可以将所有命令组合成GNUsed
解决方案,如
sed -En '/.*title: *(.*[[:alnum:]]).*/{s//\1/;s/([^[:alnum:]]+|^)([0-9a-zA-Z])/\U\2/gp}'
见
详细信息
-POSIX ERE语法打开(-En
),默认行输出被E
n
-匹配具有/.*title:*(.[:alnum:]])./
的行,该行在组1中捕获最后一个alnum字符,并匹配该行的其余部分title:
-如果行匹配,{s//\1/;s/([^[:alnum:]+|^)([0-9a-zA-Z])/\U\2/gp}
-删除除第1组模式以外的所有模式(如上所述)s//\1/
-匹配并捕获字符串开头或1+非alnum字符到组1(使用s/([^[:alnum:]+|^)([0-9a-zA-Z])/\U\2/
)中,然后将alnum字符捕获到组2(使用([^[:alnum:]+|^)
)中,并替换为大写的组2内容(使用([0-9a-zA-Z])
\U\code>)
[^[:alnum:][]
更改为[^[:alnum:][]+
以获得一个或多个非alnum字符。感谢@WiktorStribiżew,这起了作用。尝试sed-En'/.*title::.+/{s/\1/\s/([^[^[:alnum:][zaz]+\U\U\2/gp是的,它起了作用@WiktorStribiżew echotest title://这是一个测试,sed./.-//([^[:alnum:][+|^ |$)([0-9a-zA-Z])/\U\2/gp}'
这给了thisistest,&
@rodee一个很好的答案,我忘了这行的其余部分不是字母数字的。修复。