質問: sedでbash変数を処理する bash変数latlngには、緯度と経度の値がかっこで囲まれています。_(53.3096,-6.28396)_これらをlatおよびlonと呼ばれる変数に解析したいので、sedを介して実行しようとしていますlat=$(sed "s/(\(.*\),\(.*\))/\1/g" "$latlng") lon=$(sed "s/(\(.*\),\(.*\))/\2/g" "$latlng")ただし、次のエラーが発生します。sed: can't read (53.3096,-6.28396): no such file or directory
回答: この特定のケースではsiegexの回答の方が適していますが、sedに任意のテキストを渡す方法も知っておく必要があります。sedは、2番目、3番目などのパラメーターとしてファイル名を想定しています。ファイル名が見つからない場合は、標準入力から読み取ります。したがって、処理したいテキストがファイルにない場合は、sedにパイプする必要があります。最も簡単な方法はこれです:echo "blah blah" | sed 's/blah/blam/g' したがって、あなたの例は次のようになります:lat=$(echo "$latlng" | sed 's/(\(.*\),\(.*\))/\1/g') lon=$(echo "$latlng" | sed 's/(\(.*\),\(.*\))/\2/g') 代替(より良いがあいまいな)メソッドあなたがその可能性があると思うなら$latlngはダッシュで始めることもできますが、詳細を知りたい場合は、printfの代わりにechoを使用する必要があります。printf '%s' "$latlng" | sed 's/foo/bar/g' または「ヒアドキュメント」ですが、使用している構成では少し扱いにくい場合があります。lat=$(sed 's/foo/bar/g' <<end $latlng end ) または、bashを使用していて、移植性を気にしていない場合は、「こちらの文字列」を使用できます。sed 's/foo/bar/g' <<< "$latlng"