用 bash 的单词提取字符串的前三个字符,用 sed 提取 f.ex.



从字符串"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

相关内容

  • 没有找到相关文章

最新更新