用带有bash的单词f.ex提取字符串的前三个字符。与sed

时间:2018-09-20 12:11:43

标签: bash sed

我需要从字符串“ 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?

2 个答案:

答案 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