Чтение строки переменного размера и разбиение ее содержимого на отдельные строки с текстом

У меня есть файл с заголовком (первая строка) с переменной длиной; и это происходит как:

"One"|"Two"|"Three" 

или

 "One"|"Two"|"Three"|...|"One Hundred" 

и хотите получить цикл, который преобразует его в новый файл:

 "Hello One!" "Hello Two!" "Hello Three! ..." "Hello One Hundred!" 

Что мне делать? Использовать awk? СЭД?

Я не мог найти решение без фиксации размера.

Моя ОС – Linux-RedHat-RHEL-6 .

bash: читать слова, разделенные каналами, в массив

 IFS='|' read -ra words < <(head -n 1 file) printf "Hello %s!\n" "${words[@]}" 

awk: перебирать слова в строке.

 awk -F'|' 'NR == 1 { for (i=1; i<=NF; i++) print "Hello " $i "!"; exit}' file 

и sed:

 sed -e 2Q -e 's/\([^|]\+\)/Hello \1!/g' -e 's/[|]/\n/g' file 

Здесь простое решение с двумя вызовами sed (предполагает, что каждая строка цитируется):

 sed -n '1s#"|"#"\n"#gp' file | sed 's#"\(.*\)"#"Hello \1!"#' 

Первая команда sed заменяет «|» с новыми символами. Вторая добавляет тексты и восклицательный знак.

Если нет | внутри данных и окружающих " являются необязательными, вы также можете использовать (быстрее):

 head -1 file | tr \| \\n | sed 's#"\?\(.*\)"\?#"Hello \1!"#'