2

まず、これが以前に回答された場合に謝罪しますが、私の問題を解決できませんでした。

パターンを検索し、テキストと変数の両方で構成されるテキスト行に置き換える必要があります.ところで、私はbashを使用しています..

いう

$var = "stacko.ver/rulz=" **Note: $var contain double quotes & = & a dot and /**

私は次のようにしたい 1.Search for;te.xt = 注: 検索する値には ; が含まれます。& = とドット

2.交換する

textnum=$var

もちろん、 $var は実際の値に置き換える必要があります

私の試み

sed -i "s/;te.xt =/textnum=$var/" file
sed -i "s/;te.xt =/textnum="$var"/" file
sed -i "s/";te.xt ="/"textnum=$var"/" file

これらのどれも実際には機能しませんでした。sed でエラーが発生したか、$var の値がファイルに表示されませんでした

助けてくれてありがとう

よろしく

4

2 に答える 2

5

これは sed の問題であり、bash の問題ではないため、引用は役に立ちません。テキストに表示されない sed s-expression 区切り文字を選択するだけです。

sed -i "s|;te.xt =|textnum=$var|" file

s入力に表示されない任意の区切り記号を選択できます。sed -e 'streetlight'完全に有効な sed コマンドです。

于 2013-08-07T16:52:18.070 に答える
2

エラーが表示されます:

$ var="stacko.ver/rulz="
$ data="foo ;te.xt = bar"
$ sed "s/;te.xt =/textnum=$var/" <<< "$data"
sed: -e expression #1, char 31: unknown option to `s'

問題は$var、スラッシュが含まれているため、sed のs///コマンドが壊れていることです。$var に表示されない文字を選択する必要があります

$ sed "s#;te.xt =#textnum=$var#" <<< "$data"
foo textnum=stacko.ver/rulz= bar

これは難しい場合があります -- スラッシュとハッシュが $var にある場合はどうなるでしょうか? bash を使用すると、ANSI-C クォーティングを使用して、データに表示される可能性が低い制御文字を使用できます。

$ sed $'s\037;te.xt =\037textnum=$var\037' <<< "$data"
foo textnum=stacko.ver/rulz= bar
于 2013-08-07T16:53:20.520 に答える