从字符串"Release Enterprise Production"中,我需要提取每个单词的前三个字符,并将字符串"RelEntPro"放在一起。我可以把它放在一行中,但它相当长:
export APP_NAME="";
for i in Release Enterprise Production; do
APP_NAME="$APP_NAME${i:0:3}";
done;
echo $APP_NAME
有没有更优雅的方法可以做到这一点 sed? 还是尴尬?
缩短循环的一些技巧:
export
是不必要的。+=
是串联的快捷方式。${i:0:3}
可以缩短为${i::3}
.- 作业右侧不需要引号。
(最好避免所有大写变量名称,因为它们是由 shell 保留的,所以我APP_NAME
更改为appName
。
appName=; for n in Release Enterprise Production; do appName+=${n::3}; done
另一种方法是使用grep -o
匹配每个单词开头的三个字符,并且只打印出匹配的位。
str="Release Enterprise Production"
egrep -o '<...' <<< "$str" | tr -d 'n'
或者,您可以使用 Awk 并遍历每个字段。
awk '{for(i=1;i<=NF;++i) printf "%s",substr($i,0,3); print ""}' <<< "$str"
你使用 cut 来取字符:
echo 'Release Enterprise Production' | tr ' ' 'n' | cut -c-3 | echo $(cat) | sed 's/ //g'
输出:
RelEntPro