Я не вижу ничего плохого в использовании sed
в этом случае. Это подходящий инструмент для работы.
Ваша команда работает хорошо (с заданными данными):
$ sed '/baz/s/foo/bar/g' food.txt
mangoes|foo|faa
oranges|foo|faa
chocolates|bar|baz
Использование регулярного выражения для сопоставления любой строки, начинающейся с | b
и заканчивающейся z
в конце строка (вместо baz
в любом месте строки):
$ sed '/|b.*z$/s/foo/bar/g' food.txt
mangoes|foo|faa
oranges|foo|faa
chocolates|bar|baz
Чтобы внести изменения в файл (с GNU sed
):
$ sed -i '/|b.*z$/s/foo/bar/g' food.txt
или (с любым sed
реализация):
$ sed '/|b.*z$/s/foo/bar/g' food.txt >tmpfile && mv tmpfile food.txt