0

perlを使用して文字を検索および置換するbash関数を作成しようとしています。私は次の関数を書きました:

find_replace() {
 perl -p -i -e "s/$1/$2/g" "$3"

}

$1と$2は、それらを囲む引用符でエスケープされているため、現在は機能していないと思います(私が知る限り、これは、そこに必要なperl構文の一部です)。

この関数を機能させる方法(またはこの問題を回避するためのより良い記述方法)に関するヒントはありますか?

編集:

Barmarの提案に従って、関数を実行しようとしたときの出力は次のとおりです。

dholtz$ find_replace \001 , revenue_by_offer_tid
+ find_replace 001 , revenue_by_offer_tid
+ perl -p -i -e ''\''s/001/,/g'\''' revenue_by_offer_tid
++ update_terminal_cwd
++ local 'SEARCH= '
++ local REPLACE=%20
++ local PWD_URL=file://Dave-Mac-2.local/Users/dholtz
++ printf '\e]7;%s\a' file://Dave-Mac-2.local/Users/dholtz
dholtz$ head revenue_by_offer_tid
+ head revenue_by_offer_tid
Friday00228686050.0
Friday00228690410.0
Friday017438366585.040000000000004
Friday017438366591.3200000000000003
Friday017438366600.12
Friday0174383666114.759999999999962
Friday017438371407.440000000000006
Friday0174383815118.599999999999977
Friday017438382221.5600000000000005
Friday017438383663.480000000000002

期待される出力は次のとおりです。

Friday,0,0,22,86860,50.0
Friday,0,0,22,86904,10.0
Friday,0,1,7438,36658,5.040000000000004
Friday,0,1,7438,36659,1.3200000000000003
Friday,0,1,7438,36660,0.12
Friday,0,1,7438,36661,14.759999999999962
Friday,0,1,7438,37140,7.440000000000006
Friday,0,1,7438,38151,18.599999999999977
Friday,0,1,7438,38222,1.5600000000000005
Friday,0,1,7438,38366,3.480000000000002
4

2 に答える 2

0

バックスラッシュが原因で、引用符が適切に処理されませんでした

find_replace() {
  perl -p -i -e "s/$1/$2/g" "$3"    
}
于 2013-03-01T02:22:27.620 に答える