如何重写文件中的行?

如何重写文件中的行?

在 csv 文件中,有几行不适合我需要的数据。例如,这是我的 example.csv 文件:

14/Feb/2016:13:21:33-0500,mk
15/Feb/2016:14:21:33-0500,mk
16/Feb/2016:15:21:33-0500]http://map1.link.de/mk
17/Feb/2016:16:21:33-0500]http://map5.link.de/mk

我可以获取该行并使用以下方法更正它们:

$ cat example.csv | grep "map" | sed 's/\(.*\)].*\/\(.*$\)/\1,\2/'

结果:

16/Feb/2016:15:21:33-0500,mk
17/Feb/2016:16:21:33-0500,mk

但我真正想要的是纠正它们并将它们保存在同一个文件中。我怎样才能做到这一点?

答案1

如果您使用 GNU Sed,只需运行:

sed -i '/map/s/\(.*\)].*\/\(.*$\)/\1,\2/' example.csv

警告:这将覆盖文件的内容。如果您不确定正则表达式是否正确,请先复制一份确切地你想要什么。


如果你有 GNU Sed,或者您只是想要一个可以在任何 POSIX 系统上运行的更便携的解决方案,使用ex

对于不编辑文件的试运行:

printf '%s\n' 'g/map/s/\].*\/\([^/]*\)$/,\1/' %p | ex example.csv

对结果满意后保存更改:

printf '%s\n' 'g/map/s/\].*\/\([^/]*\)$/,\1/' x | ex example.csv

相关内容