Я меняю последнее слово определенной строки в тексте. Это слово может повторяться в других строках.
Какую команду я могу использовать для этого?
# file libros.bd
while IFS = read line
do
word=$(echo $line|rev|cut -f1 -d' '|rev) #Last word in each line
done <"$file"
Это мой входной файл:
18654 "JuanFrances" autor1 1964 1 no
18655 "Lucas Tercero" autor2 1987 2 si
18656 "Fernando Emperador" autor3 1845 5 no
18657 "Juan Fernando" autor3 1965 1 si
Это будет окончательное состояние
18654 "JuanFrances" autor1 1964 1 no
18655 "Lucas Tercero" autor2 1987 2 si
18656 "Fernando Emperador" autor3 1845 5 no
18657 "Juan Fernando" autor3 1965 1 no
Это был бы один из способов
sed ''"$line"'s/no/si/' libros.bd > temp && mv temp libros.bd
на чем вы основываете свои изменения?
Когда вы говорите «мой выходной файл», вы действительно имеете в виду «мой входной файл»? === Когда вы говорите "слово", как программа узнает, какое слово? === Когда вы говорите "определенная строка", как программа узнает, какая строка? === Этот вопрос слишком расплывчатый. Как дано, это может быть вопрос, как изменить последнее слово в последней строке. Пожалуйста, переформулируйте вопрос, исключив неопределенные артикли и предоставив достаточно конкретных деталей, чтобы кто-то мог использовать их для написания реальной программы.





Чтобы получить последнее слово, вы можете использовать grep
grep -Eo '[^ ]+$'
так что в вашем случае:
word=$(echo $line| grep -Eo '[^ ]+$')
grep ищет по шаблону, как вы знаете, -E — это --extended-regexp или более продвинутый математический анализ регулярных выражений. -o вывод совпадающих строк, чтобы не окрашивать их.
часть регулярного выражения:
[^ ] соответствует пробелу
+ соответствует предыдущему один или несколько раз
$ соответствует концу строки
И вот вывод на основе вашего ввода:
no
si
no
si
state
no
si
no
no
См.: Как изменить символ в определенной строке файла