Bash 如何加上「/&引用;如果sed中不存在行的末尾
我正试图想出一个脚本来格式化apache的转发,我需要做的是获取一个url,剥离域,然后在行的末尾附加一个“/”,如果还没有,现在我想出的脚本是:Bash 如何加上「/&引用;如果sed中不存在行的末尾,bash,sed,Bash,Sed,我正试图想出一个脚本来格式化apache的转发,我需要做的是获取一个url,剥离域,然后在行的末尾附加一个“/”,如果还没有,现在我想出的脚本是: #!/bin/bash sed 's/http:\/\/www.mydomain.co.uk//g' address > address1 sed -e 's/$/\//' address1 > address2 现在,这个脚本将去掉开头的“”,并在结尾添加一个“/”,但是我已经在一些url中添加了“/”。如果“/”不存在,我如何使s
#!/bin/bash
sed 's/http:\/\/www.mydomain.co.uk//g' address > address1
sed -e 's/$/\//' address1 > address2
现在,这个脚本将去掉开头的“”,并在结尾添加一个“/”,但是我已经在一些url中添加了“/”。如果“/”不存在,我如何使sed只添加“/”?在行尾匹配除斜杠以外的字符,并替换为匹配(
&
)加斜杠:
sed 's![^/]$!&/!'
为了让事情变得简单一点,我将分隔符从/
更改为编码>,这样查找/替换部件中的斜杠就不需要转义。另一种方法:
$ cat file
abcd/
efgh
$ sed 's:/\?$:/:g' file
abcd/
efgh/
$ 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/
注意事项:
- 可能适用于您的情况,但需要对
进行转义以匹配ex:s的文本
|http://www\.mydomain\.co\.uk|g
g
仅当一行中有多个匹配项时才需要标记
无需使用多个命令执行此操作:
$ 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/
请注意,
是一个regexp元字符,意思是“任何字符”,因此如果您希望按字面意思处理它,则需要对其进行转义。我会简单地执行(无反向引用):sed-e的#[^/]$#和/#'