在源自 csv 文件的行中
14/Feb/2016:15:21:33-0500]http://map1.link.de/mk
最容易替换/删除和添加的部分是什么
]http://map1.link.de/
和
,
记住之后map
可以是任意数字map1, map2, map3
几行的示例:
14/Feb/2016:15:21:33-0500]http://map1.link.de/mk
14/Feb/2016:16:21:33-0500]http://map5.link.de/mk
最后结果
14/Feb/2016:15:21:33-0500,mk
14/Feb/2016:16:21:33-0500,mk
答案1
我会用sed
:
sed 's/\(.*\)].*\/\(.*$\)/\1,\2/' csv
14/Feb/2016:15:21:33-0500,mk
14/Feb/2016:16:21:33-0500,mk
csv
这个文件在哪里:
cat csv
14/Feb/2016:15:21:33-0500]http://map1.link.de/mk
14/Feb/2016:16:21:33-0500]http://map5.link.de/mk
解释:
\(.*\)]
= 搜索和节省每个字符直到第一个[
.*\/
= 之后,搜索 - 执行不是保存-一切直到最后/
\(.*$\)
=节省之后的所有内容直到行尾 ( mk
)
\1,\2
= 替换为我们保存的内容并在中间添加逗号
答案2
您可以[0-9]\{1,\}
使用扩展正则表达式运算符将一个或多个十进制数字的序列 POSIXly 表示为或不太可移植,+
如下[0-9]+
所示
sed 's@]http://map[0-9]\{1,\}\.link\.de/@,@' file.csv
14/Feb/2016:15:21:33-0500,mk
14/Feb/2016:16:21:33-0500,mk
或者
sed -E 's@]http://map[0-9]+\.link\.de/@,@' file.csv
14/Feb/2016:15:21:33-0500,mk
14/Feb/2016:16:21:33-0500,mk
如果你想更换任何URI(不仅仅是那些合格主机名匹配的URI map?.link.de
)那么你可以将后者简化为
$ sed -E 's@]http://[^/]*/@,@' file.csv
14/Feb/2016:15:21:33-0500,mk
14/Feb/2016:16:21:33-0500,mk