В комментарии я показал решение на основе sed
, но это может быть сложно.
Вы можете использовать awk
(хороший выбор) или попробовать что-то, что будет работать для небольших файлов.Пошаговое обучение с использованием цикла.
Чтение файла и отображение строк
while IFS= read -r line; do
echo "${line}"
done < source_file
Эхо-то особенное, когда строка имеет ';'
while IFS= read -r line; do
if [[ "${line}"=~ ; ]]; then
echo "Something special"
else
echo "${line}"
fi
done < source_file
Делайте что-то особенное, когда строка имеет';'
#!/bin/bash
while IFS= read -r line; do
if [[ "${line}" =~ ";" ]]; then
while IFS= read -r field; do
if [ -z "${firstfield}" ]; then
firstfield="${field}"
else
echo "${firstfield}${field}"
fi
done < <( echo "${line}" | tr ';' '\n' )
else
echo "${line}"
fi
done < source_file
Понижение до ksh или sh при необходимости
И if [[ .. ]]
, и <(..)
не определены в POSIX, поэтому у вас остался вызов.