質問

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

いくつかありますか set 私が避けている選択肢は何ですか?

役に立ちましたか?

解決

これを試してください:

$ echo oneone
oneone
$ !!:gs/one/two/    # Repeats last command; substitutes 'one' --> 'two'.
twotwo

他のヒント

私の回答をブレンドこちら John Feminellaの場合、エイリアスが必要な場合はこれを実行できます。

$alias dothis='`history -p "!?monkey?:gs/jpg/png/"`'
$ls *.jpg
monkey.jpg
$dothis
monkey.png

!!前のコマンドだけを行いますが、!?string? <!> quot; string <!> quot;を含む最新のコマンドに一致します。

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

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

二重スラッシュの使用は<!> quot; global <!> quot;を意味することに注意してください。文字列の置換。

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

<!> quot; myfile.txt <!> quot;という名前のファイルの文字列をグローバルに置換する方法は次のとおりです。

$ sed -i -e "s/word/replacement/g" myfile.txt

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

エコーしたい BAABAA それよりも BLABLA LをAに置き換えることで

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

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

SUSE 10.1でテストします。 <!> quot; ^ word ^ replacement ^ <!> quot; <!> quot; ^ word ^ replacement <!> quot;は機能しません。うまくいきます。 インスタンスの場合:

linux-geek:/home/Myworks # ls /etc/ld.so.conf   
/etc/ld.so.conf  
linux-geek:/home/Myworks # ^ls^cat  
cat /etc/ld.so.conf  
/usr/X11R6/lib/Xaw3d  
/usr/X11R6/lib  
/usr/i486-linux-libc5/lib=libc5  
/usr/i386-suse-linux/lib  
/usr/local/lib  
/opt/kde3/lib  
/opt/gnome/lib  
include /etc/ld.so.conf.d/*.conf  
linux-geek:/home/Myworks #   
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top