我想找到一种方法来将数字开头的单词的首字母大写。
输入:
2019donaldtrump
03012019paris
Run Code Online (Sandbox Code Playgroud)
预期结果:
2019Donaldtrump
03012019Paris
Run Code Online (Sandbox Code Playgroud)
有没有办法修改此命令
sed -e 's/^\(.\)/\U\1/g'
Run Code Online (Sandbox Code Playgroud)
使它寻找单词的第一个实际字母?
非常感谢
这似乎可以满足您在测试中的要求:
sed -e 's/\([[:digit:]]\)\([a-z]\)/\1\U\2/g' input.txt
Run Code Online (Sandbox Code Playgroud)
输入:
2019donaldtrump
03012019paris
Run Code Online (Sandbox Code Playgroud)
输出:
2019Donaldtrump
03012019Paris
Run Code Online (Sandbox Code Playgroud)
编辑:如Toto所指出的,分组实际上并不是必需的:
sed -e 's/[[:digit:]][a-z]/\U\0/g' input.txt
Run Code Online (Sandbox Code Playgroud)
awk 中的一个:
$ awk 'BEGIN{FS=OFS=""}/^[0-9]/ && match($0,/[a-z]/){$RSTART=toupper($RSTART)}1' file
Run Code Online (Sandbox Code Playgroud)
输出:
2019Donaldtrump
03012019Paris
notstartingwith123
Run Code Online (Sandbox Code Playgroud)
解释:
$ awk 'BEGIN {
FS=OFS="" # separators to empty
}
/^[0-9]/ && match($0,/[a-z]/) { # if there is starting digit and lower case letters
$RSTART=toupper($RSTART) # capitalize the first letter
}1' file # output
Run Code Online (Sandbox Code Playgroud)
更短,asmatch将作为其值返回RSTART,存储并使用它:
$ awk 'BEGIN{FS=OFS=""}/^[0-9]/&&r=match($0,/[a-z]/){$r=toupper($r)}1' file
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |