Bash のすべての一致に ^単語^置換^ を使用しますか?
質問
明確にするために、私はを実行する方法を探しています グローバル 以前に使用したコマンドを検索して置換します。 ^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 #
所属していません StackOverflow