以下に示すように、Sample.textというテキストファイルがあります。
Continent Lat/Lon: 46.07305 / -100.546
Country Lat/Lon: 38 / -98
City Lat/Lon:(37.3845) / (-122.0881)
一時ファイルを使わずにこのテキストを処理して、以下のような出力を得たいと思います。
Continent Lat/Lon: 46.07305 / -100.546
Country Lat/Lon: 38 / -98
City Latitude: (37.3845)
City Longitude: (-122.0881)
緯度/経度の値を制御できません。
私は2つのawkスクリプトを使ってこれをしました。
BEGIN { FS=":"} {print $2} | BEGIN { FS="/"} {printf "City Latitude:%s\nCity Longitude:%s\n",$1,$2}
rawファイルに書きたいのですが、使用できる方法はありますか?
sed -i
ご意見をお寄せいただきありがとうございます。
ベストアンサー1
sed -i 's,^City Lat/Lon:(\(.*\)) / (\(.*\))$,City Latitude: (\1)\nCity Longitude: (\2),' /path/to/file
説明する
sed -i 's,foo,bar,' /path/to/file
ここでは代わりに区切り文字として使用するので、エスケープせずに文字列で使用sed
できます。foo
bar
,
/
/
^City Lat/Lon:(\(.*\)) / (\(.*\))$
^
:とが$
それぞれ行の始まりと終わりであり、両方がそれぞれ\(.*\)
キャプチャグループを表すこの正規表現の発生を探します。City Latitude: (\1)\nCity Longitude: (\2)
:はこの文字列に置き換えられます。ここで\1
、\2
は最初の式でキャプチャされたグループを表し、\n
改行文字です。