我是shell脚本的新手(实际上只有三天:))所以不要开枪.. !!
在我的脚本中,我有一个看起来像这样的代码:
string="this-is-my-string"
我喜欢修改变量的内容,以便变成这样:
string="This Is My String"
我不寻找将原始字符串修改为修改版本的正则表达式。我已经找到了解决方案here。
我在寻找的是如何使用sed
命令修改变量内的文本。说实话,我真的不知道sed
是否可能。如果无法使用sed
进行修改,是否还有其他方法可以实现相同的结果?
答案 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)
如果您感兴趣,Python
中interpreter
的{{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