我正在尝试编写一个脚本来格式化apache的转发,我需要做的是取一个url,剥离域然后在行的末尾附加一个“/”如果没有一个已经有了,现在我提出的脚本就是:
#!/bin/bash
sed 's/http:\/\/www.mydomain.co.uk//g' address > address1
sed -e 's/$/\//' address1 > address2
现在这个脚本将在开头取消“http://www.mydomain.co.uk”并在结尾添加一个“/”,但是其中一些网址已经有了“/”。如果它还没有那么我怎么才能加上“/”?
答案 0 :(得分:4)
在该行末尾匹配斜杠以外的字符,并将其替换为匹配(&
)加斜杠:
sed 's![^/]$!&/!'
为了让事情变得更容易,我将分隔符从/
更改为!
,以便查找/替换部分中的斜杠不需要转义。
答案 1 :(得分:1)
$ cat file
abcd/
efgh
$ sed 's:/\?$:/:g' file
abcd/
efgh/
答案 2 :(得分:1)
另一种方法:
objDate=year(now)
也可以组合多个命令:
$ echo 'http://www.mydomain.co.uk' | sed '/\/$/! s|$|/|'
http://www.mydomain.co.uk/
$ echo 'http://www.mydomain.co.uk/' | sed '/\/$/! s|$|/|'
http://www.mydomain.co.uk/
备注:强>
$ echo 'http://www.mydomain.co.uk/abc' | sed 's|http://www.mydomain.co.uk||g; /\/$/! s|$|/|'
/abc/
$ echo 'http://www.mydomain.co.uk/abc/' | sed 's|http://www.mydomain.co.uk||g; /\/$/! s|$|/|'
/abc/
需要转义以匹配文字.
,例如:.
s|http://www\.mydomain\.co\.uk||g
标志答案 3 :(得分:1)
没有必要使用多个命令执行此操作:
$ cat file
http://www.mydomain.co.uk/foo/
http://www.mydomain.co.uk/bar
$ sed 's#http://www\.mydomain\.co\.uk\(.*[^/]\).*#\1/#' file
/foo/
/bar/
请注意,.
是一个正则表达式元字符,意思是“任何字符”,因此如果您希望对它进行字面处理,则需要将其转义。