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
ベストアンサー1
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"