我需要从字符串“ 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是否有更优雅的方法?还是awk?
答案 0 :(得分:4)
一些缩短循环的提示:
export
是不必要的。+=
是连接的快捷方式。${i:0:3}
可以缩写为${i::3}
。(最好避免使用所有大写的变量名,因为它们由外壳保留,因此我将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"
答案 1 :(得分:2)
您使用cut提取字符:
echo 'Release Enterprise Production' | tr ' ' '\n' | cut -c-3 | echo $(cat) | sed 's/ //g'
输出:
RelEntPro