トップページ > プログラム > 2018年08月17日 > TmUZ5Zjz

書き込み順位&時間帯一覧

6 位/216 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000013110000000000006



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
シェルスクリプト総合 その28

書き込みレス一覧

シェルスクリプト総合 その28
159 :デフォルトの名無しさん[sage]:2018/08/17(金) 08:44:27.28 ID:TmUZ5Zjz
パターン文字列をsedで置換しちゃうとか(GNU sed の場合)

$ pattern='foo[1]'
$ sed "s/$(sed -r 's/([-*+^.$/\]|\[|\])/\\\1/g' <<< "${pattern}")/foo[2]/g" <<< 'foo[1]'
foo[2]
シェルスクリプト総合 その28
165 :デフォルトの名無しさん[sage]:2018/08/17(金) 09:16:49.96 ID:TmUZ5Zjz
>>163
ああ、bash じゃなくて ash だから here string("<<<") が使えないのね…

# echo 'foo[1]' | sed "s/$(echo "${pattern}" | sed -r 's/([-*+^.$/\]|\[|\])/\\\1/g')/foo[2]/g"

こんな感じかな。
シェルスクリプト総合 その28
168 :デフォルトの名無しさん[sage]:2018/08/17(金) 09:57:27.72 ID:TmUZ5Zjz
>>167
う〜ん、ash でやってみたけど、1番目、2番目は問題ないなぁ
Busybox の sed は -r オプションがないんじゃなかったかな
シェルスクリプト総合 その28
169 :デフォルトの名無しさん[sage]:2018/08/17(金) 09:58:49.05 ID:TmUZ5Zjz
あ、ごめん勘違いしてた。ちょっと考えてみる
シェルスクリプト総合 その28
171 :デフォルトの名無しさん[sage]:2018/08/17(金) 10:13:01.82 ID:TmUZ5Zjz
あれ?でもさ、

pattern='+'
$ echo "$pattern" | sed "s/$(echo "${pattern}" | sed -r 's/([-*+^.$/\]|\[|\])/\\\1/g')/foo[2]/g"
foo[2]

入力が '+' でパターン文字列も '+' だから foo[2] に置換されるのは正しいんじゃないかな?

でもまぁ、GNU sed で -r オプション付けると `+` 記号がメタキャラクタになるから、付けない場合は
`+` を考慮する必要はなかったのね…

$ echo "$pattern" | sed "s/$(echo "${pattern}" | sed -r 's/([-*^.$/\]|\[|\])/\\\1/g')/foo[2]/g"

こっちの方が良いみたい。
シェルスクリプト総合 その28
179 :デフォルトの名無しさん[sage]:2018/08/17(金) 11:32:47.25 ID:TmUZ5Zjz
grep にある -F オプションと同等のオプションが sed にも
欲しいところではあるなぁ。生まれは同じなのに sed には無い
のは何故…(実はあったりして)


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。