SED一時ファイルを使用せずにファイル内の文字列を検索および置換する

SED一時ファイルを使用せずにファイル内の文字列を検索および置換する

以下に示すように、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できます。foobar,//
  • ^City Lat/Lon:(\(.*\)) / (\(.*\))$^:とが$それぞれ行の始まりと終わりであり、両方がそれぞれ\(.*\)キャプチャグループを表すこの正規表現の発生を探します。
  • City Latitude: (\1)\nCity Longitude: (\2):はこの文字列に置き換えられます。ここで\1\2は最初の式でキャプチャされたグループを表し、\n改行文字です。

おすすめ記事