sedを使用したbash変数の処理

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

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

おすすめ記事