我已经知道全局(/g
(标志,它意味着操作应该在文件中全局进行。
如果我想替换"0"的所有实例;你好世界";用";再见空间";,我想在发言的末尾加上/g
。
这是有道理的。然而
我正在编写一个sed
替换命令,注意到即使我不包括/g
,它仍然会替换文件中的所有实例。以下是我的.txt
文件的内容:
hello there
how is life
today is over
today is over
don't be sad
today is over
tomorrow is a new day
现在,我想把所有这些";今天结束了";行并用";明天就要开始了;。因此,我写了以下代码:
YOUR_FILE='testing.txt'
LINE="today is over"
sed -i "" "s/$LINE/tomorrow will begin/" $YOUR_FILE
尽管末尾没有包含全局标志,但它仍然用tomorrow will begin
替换today is over
的所有实例。
有人能向我解释一下这种行为吗?因为我找不到任何关于它的信息。为什么即使我在最后省略了/g
部分,它也会替换所有实例?
或者,如果我只想删除第一个实例,我该如何指定它?
我在Mac上做这个。
全局标志允许sed替换同一行中的多个匹配项。
$ echo 'world world' > somefile
$ sed 's/world/hello/' somefile
hello world
$ sed 's/world/hello/g' somefile
hello hello