代码之家  ›  专栏  ›  技术社区  ›  mles

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

  •  1
  • mles  · 技术社区  · 7 年前

    从字符串“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 回复  |  直到 7 年前
        1
  •  4
  •   John Kugelman Michael Hodel    7 年前

    缩短循环的一些技巧:

    • 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"
    
        2
  •  2
  •   hamza tuna    7 年前

    你用切取木炭:

    echo 'Release Enterprise Production' | tr ' ' '\n' | cut -c-3 | echo $(cat) | sed 's/ //g'
    

    输出:

    RelEntPro
    
    推荐文章