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

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

13 голосов
/ 04 февраля 2012

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

hello sara, my name is sara too.

становится:

hello mary, my name is mary too.

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

Ответы [ 4 ]

14 голосов
/ 04 февраля 2012

Pure bash way:

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

ИЛИ используя sed:

after=$(sed 's/sara/mary/g' <<< "$before")
echo "$after"

ВЫХОД:

hello mary , my name is mary too .
8 голосов
/ 04 февраля 2012

Вы можете использовать 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 .
3 голосов
/ 04 февраля 2012

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

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

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

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

# perl -p -i -e 's/sara/mary/g;' FILENAME
1 голос
/ 04 февраля 2012

Или awk

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