Swa*_*are 5 sed shell-script text-processing
我有一个名为 sample.text 的文本文件,它看起来像这样
Continent Lat/Lon: 46.07305 / -100.546
Country Lat/Lon: 38 / -98
City Lat/Lon:(37.3845) / (-122.0881)
Run Code Online (Sandbox Code Playgroud)
我想处理此文本以在不使用临时文件的情况下获得如下输出
Continent Lat/Lon: 46.07305 / -100.546
Country Lat/Lon: 38 / -98
City Latitude: (37.3845)
City Longitude: (-122.0881)
Run Code Online (Sandbox Code Playgroud)
我无法控制纬度/经度的值。
我已经使用 2 个 awk 脚本完成了这项工作
BEGIN { FS=":"} {print $2} | BEGIN { FS="/"} {printf "City Latitude:%s\nCity Longitude:%s\n",$1,$2}
Run Code Online (Sandbox Code Playgroud)
因为我想写原始文件,有什么方法可以使用
sed -i
Run Code Online (Sandbox Code Playgroud)
感谢所有输入。
sed -i 's,^City Lat/Lon:(\(.*\)) / (\(.*\))$,City Latitude: (\1)\nCity Longitude: (\2),' /path/to/file
Run Code Online (Sandbox Code Playgroud)
sed -i 's,foo,bar,' /path/to/file:sed就地执行,替换foo为bar. 注意,我在这里使用,作为分隔符而不是/,这样我就可以/在字符串中使用而不必转义它们。^City Lat/Lon:(\(.*\)) / (\(.*\))$:找到此正则表达式的任何出现位置,其中^和$分别是行的开头和结尾,并且两者中的每一个\(.*\)代表一个捕获组。City Latitude: (\1)\nCity Longitude: (\2):替换为该字符串,其中\1和\2表示从第一个表达式捕获的组,并且\n是换行符。