如何在文件中所有/wiki/前添加指定字符串?sed命令报错排查
解决sed替换时因路径含/导致的语法错误问题
嘿,我来帮你搞定这个sed的问题!你遇到的错误完全是因为sed默认使用/作为替换命令的分隔符,而你要处理的字符串里刚好包含/(也就是/wiki/里的斜杠),这就导致sed把你写的命令当成了混乱的语法,所以抛出了unknown option to 's'的错误。
问题根源
你之前写的命令:
sed 's//wiki//bar/wiki//g' abcdef
这里sed会把第一个/当作分隔符,然后把下一个/(也就是/wiki/里的第二个斜杠)当成第二个分隔符,这样匹配模式就变成了空字符串,替换内容变成了wiki,后面的//bar/wiki//完全不符合sed的替换语法,自然报错。
解决方案:换分隔符或转义斜杠
针对你的需求——在所有/wiki/前添加https://en.wikipedia.org(也就是把/wiki/替换为https://en.wikipedia.org/wiki/),有两种简单的解决方法:
方法1:更换sed的分隔符(推荐)
sed允许你使用其他字符作为替换命令的分隔符,比如#、|或者@,只要这个字符不在你的匹配和替换字符串里就行。这样就不用处理烦人的转义了:
# 使用#作为分隔符 sed 's#/wiki/#https://en.wikipedia.org/wiki/#g' abcdef # 或者用|作为分隔符 sed 's|/wiki/|https://en.wikipedia.org/wiki/|g' abcdef
这两个命令都能直接完成你的需求,把文件里所有的/wiki/替换成带完整域名的路径。
方法2:转义字符串里的斜杠
如果你坚持要用/作为分隔符,那必须把匹配和替换字符串里的所有/都用\转义:
sed 's/\/wiki\//https:\/\/en.wikipedia.org\/wiki\//g' abcdef
这种方法虽然可行,但写起来比较繁琐,容易出错,所以更推荐第一种换分隔符的方式。
验证结果
执行上面的命令后,你的文件内容会从:
abc"/wiki/A"def ghi"/wiki/B"jkl mno"/wiki/C"pqr
变成预期的:
abc"https://en.wikipedia.org/wiki/A"def ghi"https://en.wikipedia.org/wiki/B"jkl mno"https://en.wikipedia.org/wiki/C"pqr
内容的提问来源于stack exchange,提问作者abhishek
相关产品推荐
相关产品推荐

