Заменить слово другим в bash

Я хочу изменить все слова в тексте, который соответствует определенному слову с другим в Bourne shell. Например:

hello sara, my name is sara too.

будет:

hello mary, my name is mary too.

может кто-нибудь помочь мне?
Я знаю, что grep находит похожие слова, но я хочу заменить их другим словом.

5 ответов


чистый синтаксис bash:

before='hello sara , my name is sara too .'
after=${before//sara/mary}
echo $after

или синтаксис sed:

sed 's/sara/mary/g' <<< $before
echo $after

выход:

hello mary , my name is mary too .

можно использовать sed для этого:

$ sed s/sara/mary/g <<< 'hello sara , my name is sara too .'
hello mary , my name is mary too .

или если вы хотите изменить файл на месте:

$ cat FILE
hello sara , my name is sara too .
$ sed -i s/sara/mary/g FILE
$ cat FILE
hello mary , my name is mary too .

вы можете использовать sed:

# sed 's/sara/mary/g' FILENAME

выведет результаты. Конструкция s / / / означает поиск и замену с использованием регулярных выражений. "G" в конце означает "каждый экземпляр" (а не только первый).

вы также можете использовать perl и редактировать файл на месте:

# perl -p -i -e 's/sara/mary/g;' FILENAME

или awk

awk '{gsub("sara","mary")}1' <<< "hello sara, my name is sara too."

вам нужно использовать sed заменить словами