как использовать значения с помощью sed в сценариях оболочки?

#bash #shell

#удар #ракушка

Вопрос:

я пытаюсь написать сценарий оболочки на алфавитном языке ,

у меня есть 5 таких параметров

 $alphametic 5790813 BEAR RARE ERE RHYME  

получить

 ABEHMRY -gt; 5790813  

я попробовал это :

 #!/bin/bash  echo "$2 $3 $4 $5" | sed 's/ //g ' | sed 's/./amp;n/g' | sort -n | sed '/^$/d' | uniq -i gt; testing  paste -sd '' testing gt; testing2   sed "s|^(.*)$|1 -gt; ${1}|" testing2   

но я получаю ошибку (с последней командой sed ), я не знаю, в чем проблема .

Комментарии:

1. but i get error какая ошибка?

2. @DOSHASAN : исправлен мой ответ

Ответ №1:

Другой подход:

 chars=$(printf '%s' "${@:2}" | fold -w1 | sort -u | paste -sd '') echo "$chars -gt; $1"  

сортировка здесь -n не имеет смысла: это буквы, а не цифры.

Ответ №2:

Одна идея, используемая awk для всего этого:

 arg1="$1" shift others="$@"  awk -v arg1="${arg1}" -v others="${others}" ' BEGIN { n=split(others,arr,"") # split into into array of single characters  for (i=1;ilt;=n;i  ) # loop through indices of arr[] array  letters[arr[i]] # assign characters as indices of letters[] array; eliminates duplicates  delete letters[" "] # delete array index for "lt;spacegt;"  PROCINFO["sorted_in"]="@ind_str_asc" # sort array by index  for (i in letters) # loop through indices  printf "%s", i # print index to stdout  printf " -gt; %sn", arg1 # finish off line with final string  } '  

ПРИМЕЧАНИЕ: требуется GNU awk для PROCINFO["sorted_in"] (для сортировки индексов letters[] массива)

Это порождает:

 ABEHMRY -gt; 5790813