用其他字符串替换字符串

用其他字符串替换字符串

在源自 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

相关内容