我知道人们在处理路径时使用:
而不是,但是在下面的操作中它会做什么呢?/
:g
sed
为什么path1在引号之间?谁能解释一下这段代码的作用吗?
sed -i -e s:INPUT_REPLACE:"${path1}":g ${path2}
答案1
冒号:
是模式(左)和替换(右)的分隔符。 g
告诉 sed “全局”替换(更改每行上与模式匹配的所有内容,而不是仅更改给定行上的第一个)。
使用三个冒号,因为您需要三个分隔符。所以:g
实际上有两件事:最后一个分隔符和修饰符“g”。
如果表达式的这一部分使用引号"${path1}"
包含一些会在命令中出错的字符(当替换变量时)。例如,如果它包含空格或制表符,则会将 shell 传递的替换参数sed
分成两部分(错误)。
所以...这个命令
sed -i -e s:INPUT_REPLACE:"${path1}":g ${path2}
告诉sed
读/写同一个文件(-i
选项)。该文件是${path2}
.它查找包含 的行"INPUT_REPLACE"
,并用变量中的任何内容替换每行上的该字符串${path1}
。它对"INPUT_REPLACE"
每行中每次出现的情况执行此操作。
顺便说一句:如果“${path1}”包含“INPUT_REPLACE”(或者替换发生),sed
将不是重做并再次替换。它仅在初始匹配时执行此操作。