:g 在这个 sed 操作中是什么意思?

lor*_*ine 2 sed

我知道人们在处理路径时使用:而不是/,但是:g在以下sed操作中做什么?

为什么path1在引号之间?谁能解释一下这段代码的作用?

sed -i -e s:INPUT_REPLACE:"${path1}":g ${path2}
Run Code Online (Sandbox Code Playgroud)

Tho*_*key 8

冒号:是模式(左)和替换(右)的分隔符。 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 中可用。