История изменений
Исправление hanharr, (текущая версия) :
Очень навскидку, под рукой линукса нет, но возможно наведет на мысли
#!/usr/bin/env bash
if [ -z "$1" ]; then
echo "Укажите файл для обработки в качестве параметра!"
exit 1
fi
function asksure() {
while read -r -n 1 -p "Редактировать строку (y/n)? " -s answer
do
if [[ $answer = [YyNnДдНн] ]]
then
[[ $answer = [YyДд] ]] && retval=0
[[ $answer = [NnНн] ]] && retval=1
break
fi
done
return $retval
}
IFS=$'\n' read -d '' -r -a ROWS < "$1"
for ROW in "${ROWS[@]}"; do
echo "$ROW"
if asksure; then
read -r -p "Введите новую строку: " replace
echo "${ROW//*/$replace}" >> tmp.file
else
echo "$ROW" >> tmp.file
fi
done
mv tmp.file "$1"
Уверен, что можно обойтись и без временного файла. И, нужно решить проблему, что он убирает пустые строки. Дело за малым. :D
Исходная версия hanharr, :
Очень навскидку, под рукой линукса нет, но возможно наведет на мысли
#!/usr/bin/env bash
if [ -z "$1" ]; then
echo "Укажите файл для обработки в качестве параметра!"
exit 1
fi
function asksure() {
while read -r -n 1 -p "Редактировать строку (y/n)? " -s answer
do
if [[ $answer = [YyNnДдНн] ]]
then
[[ $answer = [YyДд] ]] && retval=0
[[ $answer = [NnНн] ]] && retval=1
break
fi
done
return $retval
}
IFS=$'\n' read -d '' -r -a ROWS < "$1"
# # read -a ROWS -d '\n' < "$1"
for ROW in "${ROWS[@]}"; do
echo "$ROW"
if asksure; then
read -r -p "Введите новую строку: " replace
echo "${ROW//*/$replace}" >> tmp.file
else
echo "$ROW" >> tmp.file
fi
done
mv tmp.file "$1"
Уверен, что можно обойтись и без временного файла. И, нужно решить проблему, что он убирает пустые строки. Дело за малым. :D