0

I want to replace %foo% (found in file test) with a string containing every possible character. Because of the missing character limitation, the following is not possible (executed in BASHv4):

echo %foo% > test
replacement="//this//is//a//test"
ed -s test <<< "g/%foo%/s/%foo%/$replacement"

Any idea how to replace %foo% with every possible text?

4

2 に答える 2

1

スラッシュとバックスラッシュをそれぞれ先頭にバックスラッシュを付けてエスケープすることで、目標にかなり近づくと推測できます。私の知る限り、単一のステップで bash を実行することはできないため、関数を記述して読みやすくするか、傾いたつまようじの森への旅を楽しむことができます。

$ echo %foo% > test
$ replacement="//this//is//a\\\\//test"
$ echo $replacement
//this//is//a\\//test
$ stage1=${replacement//\\/\\\\}
$ echo $stage1
//this//is//a\\\\//test
$ stage2=${stage1//\//\\\/}
$ echo $stage2
\/\/this\/\/is\/\/a\\\\\/\/test
$ ed -s test <<< g/.*foo.*/s/foo/$stage2/p
%//this//is//a\\//test%

改行は依然として問題ですが、空白は非常に安定していないため、とにかくそれらをbash環境変数に保持したくありません。

于 2011-11-01T19:19:48.870 に答える
0

コマンドrを使用すると、別のファイルからテキストを読み込むことができるため、次の方法が有効な解決策です。

  • 置換を別のファイルに保存する
  • edでファイルを開く
  • ポインタを位置に移動
  • 行を削除します(偽の置換が続きます)
  • ファイルからテキストを読み込むr FILE
  • 書いて終了
于 2011-11-04T17:35:56.453 に答える