49

明確にするために、以前に使用したコマンドでグローバル検索と置換を実行する方法を探しています。^word^replacement^最初の一致のみを置き換えるようです。

私を逃れているいくつかのsetオプションはありますか?

4

6 に答える 6

66

これを試して:

$ echo oneone
oneone
$ !!:gs/one/two/    # Repeats last command; substitutes 'one' --> 'two'.
twotwo
于 2009-03-16T02:55:10.277 に答える
6

このソリューションでは、Bash 部分文字列置換を使用します。

$ SENTENCE="1 word, 2 words";echo "${SENTENCE//word/replacement}"
1 replacement, 2 replacements

二重スラッシュの使用は、「グローバルな」文字列置換を意味することに注意してください。

このソリューションは 1 行で実行できます。

「myfile.txt」という名前のファイル内の文字列をグローバルに置き換える方法は次のとおりです。

$ sed -i -e "s/word/replacement/g" myfile.txt
于 2014-12-08T03:54:08.323 に答える
1

これを回避する厄介な方法は、次のようなものです。

L を A に交換するのBAABAAではなく、エコーしたいBLABLA

$ echo "BLABLA"   
BLABLA
$ `echo "!!" | sed 's/L/A/g'`
$(echo "echo "BLABLA" " | sed 's/L/A/g')
BAABAA
$

残念ながら、この手法は関数やエイリアスでは機能しないようです。

于 2009-03-16T02:54:31.433 に答える