2012-02-04 2 views
11

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

hello sara, my name is sara too. 

становится:

hello mary, my name is mary too. 

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

ответ

9

Чистый синтаксис Баш:

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

ИЛИ СЕПГ синтаксис:

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

ВЫВОД:

hello mary , my name is mary too . 
+1

Строку ввода лучше называть чем-то иным, чем 's', чтобы избежать путаницы в' $ {s // sara/mary} 'и' s/sara/mary/g''. – galath

6

Вы можете использовать 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

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

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

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

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

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

СЭД также может сделать на месте-модификации. –

+0

Более новые, по GNU, да. –

0

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

1

Или awk

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