LINUX.ORG.RU

История изменений

Исправление 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