sed変数置換に関する問題


今日sed変数の置き換えの問題を話しますこの問題は主に1つのグループの友达の質問の始まりです私もできませんでした
root@lp:~/pwb/tmp# echo $a
9
root@lp:~/pwb/tmp# sed 's/1/$a/g'
^C
root@lp:~/pwb/tmp# echo 123|sed 's/1/$a/g'
$a23

このように変数付きで置換すると、以下の資料を調べると簡単な方法があります.主に、私たちがsedを使うときは単一引用符を使っています.ここで変数を置換するのはbashがエスケープしていないため、二重引用符を使う必要があります.
root@lp:~/pwb/tmp# echo 123|sed "s/1/$a/g"
923
root@lp:~/pwb/tmp# echo $a
9

もう1つの極端な状況は変数に/
root@lp:~/pwb/tmp# echo "123/abc/123"
123/abc/123
root@lp:~/pwb/tmp# a=3/a
root@lp:~/pwb/tmp# echo $a
3/a
root@lp:~/pwb/tmp# echo "123/abc/123"|sed "s/$a//g"
sed:-e     #1,   7:“s”     

そうすると$a変数が変換され、多くなります/そうするとどうすれば一番簡単なのはsedの区切り文字を変更して/に変更することです
root@lp:~/pwb/tmp# echo "123/abc/123"|sed "s#$a##g"
12bc/123
root@lp:~/pwb/tmp#

これでいいのですが、この問題に基づいてずっと研究してきたのは、一つの変数に/があればどうすればいいのかということです.
root@lp:~/pwb/tmp# echo "123/abc/123"|sed "s,$a,,g"
12bc/123
root@lp:~/pwb/tmp# echo "123/abc/123"|sed "s;$a;;g"
12bc/123

実はsedは多くの記号で区切り記号を作ることができますが、sedのいくつかの正則を使用しないでください.例えば、;どちらでもいい
本文は“Dashazi's blog”のブログから出て、転載して作者と連絡してください!