讓說我有這個名單:慶典/ SED/AWK:更改第一字母字符串轉換爲大寫
39dd809b7a36
d83f42ab46a9
9664e29ac67c
66cf165f7e32
51b9394bc3f0
我想字母爲大寫的第一次出現轉變,例如
39dd809b7a36 - > 39Dd809b7a36
bash/awk/sed解決方案應該沒問題。
感謝您的幫助。
讓說我有這個名單:慶典/ SED/AWK:更改第一字母字符串轉換爲大寫
39dd809b7a36
d83f42ab46a9
9664e29ac67c
66cf165f7e32
51b9394bc3f0
我想字母爲大寫的第一次出現轉變,例如
39dd809b7a36 - > 39Dd809b7a36
bash/awk/sed解決方案應該沒問題。
感謝您的幫助。
純擊4.0+使用參數替換:
string=("39dd809b7a36" "d83f42ab46a9"
"9664e29ac67c" "66cf165f7e32" "51b9394bc3f0")
for str in ${string[@]}; do
# get the leading digits by removing everything
# starting from the first letter:
head="${str%%[a-z]*}"
# and the rest of the string starting with the first letter
tail="${str:${#head}}"
# compose result : head + tail with 1. letter to upper case
result="$head${tail^}"
echo -e "$str\n$result\n"
done
結果:
39dd809b7a36
39Dd809b7a36
d83f42ab46a9
D83f42ab46a9
9664e29ac67c
9664E29ac67c
66cf165f7e32
66Cf165f7e32
51b9394bc3f0
51B9394bc3f0
關注此代碼的工作原理?謝謝。 – 2011-05-31 09:21:58
我想不出有什麼巧妙的方法可以用基本的SW工具做到這一點,但BFI解決方案也不是太不好。
在一個真正的awk(1)或GAWK:
{ n = split($0, a, "")
for(i = 1; i <= n; ++i) {
s = a[i]
t = toupper(s)
if (s != t) {
a[i] = t
break
}
}
r = ""
for(i = 1; i <= n; ++i) {
r = r a[i]
}
print r
}
這不是太糟糕的紅寶石:
ruby -p -e '$_ = $_.split(/(?=[a-z])/, 2); $_[1].capitalize!'
這裏是我的解決方案。它不會允許###。###形式的模式,但可以根據需要進行調整。
A = $(貓); B = $(echo $ A | sed's /([az])/ ### \ 1 ### /'| sed's /。###(。)###。/\ 1/'| sed'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ /'); C =「echo $ A | sed's/[a-z]/$ B /'」; EVAL $ C
GNU SED能做到這一點
printf "%s\n" 39dd809b7a36 d83f42ab46a9 9664e29ac67c 66cf165f7e32 51b9394bc3f0 |
sed 's/[[:alpha:]]/\U&/'
給
39Dd809b7a36
D83f42ab46a9
9664E29ac67c
66Cf165f7e32
51B9394bc3f0
嗨, 我在玩sed regex一段時間後找到了自己的解決方案。 溶液 '的sed的/ \([AZ] \)/ \ U \ 1 /'' 樣品: '的Optimus:〜#回聲「96f795e4370a' '> bfe6f5e05416' '> 5f70a4463d79' '> decab73017db' '> a136f8c01c18' '>「| SED的/ \([A-Z] \)/ \ U \ 1 /''' 96F795e4370a' 'Bfe6f5e05416' '5F70a4463d79' 'Decab73017db' 'A136f8c01c18' 希望人們會發現它是有用的。 其他解決方案也很有趣。 :) – 2011-05-31 03:30:54
我希望這可以在大多數sed版本上運行。驚訝地聽到OSX沒有....:> echo bfe6f5e05416 | sed's/\([a-z] \)/ \ U \ 1 \' result = Bfe6f5e05416 ....:> sed --version result = GNU sed version 4.2.1 – shellter 2011-05-31 03:51:00
yes。我的GNU sed。 optimus:〜#sed --version GNU sed version 4.1.5 這個頁面提到\ U是GNU擴展:[http://www.gnu.org/software/sed/manual/sed.html](http: //www.gnu。org/software/sed/manual/sed.html) – 2011-05-31 03:55:19