web-dev-qa-db-ja.com

bashで単語を別の単語に置き換える

ある単語をBourneShellの別の単語と一致させるテキスト内のすべての単語を変更したいと思います。例えば:

hello sara, my name is sara too.

になります:

hello mary, my name is mary too.

誰か助けてもらえますか?
grepが類似した単語を見つけることは知っていますが、それらを他の単語に置き換えたいと思います。

14
reza

純粋なbashの方法:

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 .
14
anubhava

あなたはそのために 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 .
8
Niklas B.

Sedを使用できます:

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

結果を出力します。 s ///構造は、正規表現を使用した検索と置換を意味します。末尾の「g」は、(最初​​のインスタンスだけでなく)「すべてのインスタンス」を意味します。

Perlを使用して、ファイルをその場で編集することもできます。

# Perl -p -i -e 's/sara/mary/g;' FILENAME
3
Wes Hardaker

またはawk

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