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