[過去ログ] awkについて語るスレ $2 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
720
(5): 2013/02/06(水)03:49 AAS
“任意の記号”を含んだシェル変数をawkに渡すことは可能ですか?たとえば

[user@localhost ~]$ var='hoge'
[user@localhost ~]$ echo "hoge" | awk -v var="$var" '
$0 ~ var {print var}
END {print var}
'
hoge
hoge

ここで、varに$を含ませると

[user@localhost ~]$ var='hoge$fuga'
省6
721
(1): 2013/02/06(水)11:23 AAS
>>720
いちぎょうめのひだりがわの var は、ひょうかのさいに
せいきひょうげんへのかたへんかんがおこなわれる。

$0 ~ /hoge$fuga/ {print "hoge$fuga"}
END {print "hoge$fuga"}

めたもじとなってしまうものは、じぜんあるいはこーどのなかで
えすけーぷするひつようがある。
723: 2013/02/06(水)11:33 AAS
>>720
>721>722もどちらも原因。やりたいことをよく整理しよう。
724: 720 2013/02/06(水)15:09 AAS
すいません、echo "hoge"ではなくecho "$var"でした。
ただ、結果は>>720と同じです。

要は入力ファイル内の「メタ文字込みの任意の文字列」を、別の「メタ文字と改行込みの任意の文字列」で置換する、
というのをメタ文字のエスケープ等の面倒な処理をせずにサクッとやりたいのですが、できますか?
726
(2): 720 2013/02/07(木)22:14 AAS
>>725
やはりそうですか。
今までこういった処理はsedでしこしこエスケープしてやってたんですが、いい加減面倒になったので、
たとえばfgrepみたいに正規表現をオフにして処理する方法はないかと探しているんですが、
awkでは無理ですか・・・。
729
(2): 720 2013/02/09(土)15:32 AAS
>>727
>単に一致なら正規表現なんか使わずに比較すればいいじゃん。
意味が分からないんですが、awk上の話ですよね?

>>728
index()の引数は文字列だから、これをうまく使えば目的の処理ができる・・・のかな?

でもなんかawkでごちょごちょやるより、メタ文字をエスケープする前処理をかますなり
何なりしたほうが素直な気がしてきた・・・。たとえばこんな感じで

$ var='hoge$fuga'
$ var2=$( echo "$var" | sed 's/\$/\\\\$/g' ) ←エスケープ処理
$ echo "$var" | awk -v var="$var2" '
省5
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.036s