Извлеките первые три символа строки со словами с помощью bash, f.ex.с седом - PullRequest
0 голосов
/ 20 сентября 2018

Из строки «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 голосов
/ 20 сентября 2018

Вы используете сокращение, чтобы взять символы:

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

выходные данные:

RelEntPro
0 голосов
/ 20 сентября 2018

Несколько советов по сокращению цикла:

  • 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...