:g 在此 sed 操作中意味着什么?

:g 在此 sed 操作中意味着什么?

我知道人们在处理路径时使用:而不是,但是在下面的操作中它会做什么呢?/:gsed

为什么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不是重做并再次替换。它仅在初始匹配时执行此操作。

-i选项不在POSIX,但可用于LinuxBSD

相关内容