使用sed将bash变量中的单词大写

时间:2014-12-30 10:29:00

标签: regex bash shell sed

我是shell脚本的新手(实际上只有三天:))所以不要开枪.. !!

在我的脚本中,我有一个看起来像这样的代码:

string="this-is-my-string"

我喜欢修改变量的内容,以便变成这样:

string="This Is My String"

我不寻找将原始字符串修改为修改版本的正则表达式。我已经找到了解决方案here

我在寻找的是如何使用sed命令修改变量内的文本。说实话,我真的不知道sed是否可能。如果无法使用sed进行修改,是否还有其他方法可以实现相同的结果?

6 个答案:

答案 0 :(得分:6)

string=$(sed 's/^./\u&/; s/-\(.\)/ \u\1/g' <<< $string)

示例:

sdlcb@Goofy-Gen:~/AMD$ cat File
#!/bin/bash

string="this-is-my-string"
string=$(sed 's/^./\u&/; s/-\(.\)/ \u\1/g' <<< $string)    
echo "$string"

AMD$ ./File
This Is My String

s/^./\u&/ =&gt;将第一个字符\u大写为大写。 & =&gt;匹配的模式。

s/-\(.\)/ \u\1/g =&gt;将- followed by character替换为space followed by uppercase of the character( )用于对模式进行分组,\1 =&gt;第一组,在这种情况下只有1个这样的组。

答案 1 :(得分:4)

是的,有可能,尝试类似的事情:

#!/bin/bash
string="this-is-my-string"
string=$(echo ${string} | sed 's/\-/ /g')
echo ${string}

答案 2 :(得分:4)

带有parameter expansions的纯Bash(Bash≥4)解决方案:

$ string='this-is-my-string'
$ IFS=- read -r -a ary <<< "$string"
$ string="${ary[@]^}"
$ echo "$string"
This Is My String

答案 3 :(得分:3)

如果您感兴趣,Pythoninterpreter的{​​{1}}非常简单:

>>> string = "this-is-my-string"
>>> string = ' '.join([ s.capitalize() for s in  string.split('-')])                                                                                                          
>>> print string
This Is My String

答案 4 :(得分:1)

您也可以这样尝试

 echo '"this-is-my-string"'|sed 's/-/ /g;s/\([^"]\)\(\S*\s*\)/\u\1\2/g'

echo "$string"|sed 's/-/ /g;s/\([^"]\)\(\S*\s*\)/\u\1\2/g'

\S是一个元字符,匹配任何不是空格/空格的字符 和\s匹配任何空格字符

答案 5 :(得分:1)

以下是awk解决方案:

echo "this-is-my-string" | awk -F- '{for (i=1;i<=NF;++i) $i=toupper(substr($i,1,1)) substr($i,2)}1'
This Is My String

string='this-is-my-string'
string=$(awk -F- '{for (i=1;i<=NF;++i) $i=toupper(substr($i,1,1)) substr($i,2)}1' <<< "$string")
echo "$string"
This Is My String

这是另一个awk

echo "this-is-my-string" | awk -F- '{for(i=1;i<=NF;i++)sub(/./,toupper(substr($i,1,1)),$i)}1'
This Is My String