Regex 替换文件中第一个匹配项的sed命令无效

Regex 替换文件中第一个匹配项的sed命令无效,regex,awk,sed,Regex,Awk,Sed,我正在尝试替换文件中出现的第一个字符串。e、 g.尝试将第一个foo替换为linux sample.txt Hi foo bar This is again foo bar. 命令:sed'0,/foo/s//linux/'sample.txt 上述命令的实际输出(基本不变) 我的预期输出如下 Hi linux bar This is again foo bar. 有人能帮忙吗?/tmp/test.txt Hi foo bar! This is again foo bar 使用以下突击队仅

我正在尝试替换文件中出现的第一个字符串。e、 g.尝试将第一个foo替换为linux

sample.txt

Hi foo bar
This is again foo bar.
命令:
sed'0,/foo/s//linux/'sample.txt

上述命令的实际输出(基本不变)

我的预期输出如下

Hi linux bar
This is again foo bar.

有人能帮忙吗?

/tmp/test.txt

Hi foo bar!
This is again foo bar
使用以下突击队仅替换搜索字符串的第一个或第二个

sed-e'1s/foo/linux/;t'-e'1,//s//linux//'/tmp/test.txt
结果

Hi linux bar!
This is again foo bar

    • 带有
      awk

      awk '!f && sub(/foo/, "linux"){f=1} 1' ip.txt
      
      • !f
        将为真,因为默认情况下未初始化的变量为假
      • sub(/foo/,“linux”)
        将替换第一次出现的
        foo
        ,并返回
        1
        -从而使
        f=1
        和后续的
        !f
        始终为false
      • 1
        打印
        $0

        • 使用任何
          awk
          以下选项可能会有所帮助:

          awk '/foo/ && ++count==1{sub(/foo/,"linux")} 1' Input_file
          
          sed -z 's/foo/linux/' Input_file
          
          使用GNU
          sed
          时,如果框中有足够的内存,以下内容可能会有所帮助:

          awk '/foo/ && ++count==1{sub(/foo/,"linux")} 1' Input_file
          
          sed -z 's/foo/linux/' Input_file
          

          您缺少了替换文件内容的
          -i
          标志什么不起作用?替换还是就地编辑?现在不管是替换文件中的内联还是显示它。我的第一个重点是让它工作。如果你看一下,你会发现你的尝试只在GNU-sed上有效,而不是在本机提供的那个上MacOS@Sundeep如果第一个
          foo
          不在第一行,这也会起作用对不起,之前误解了命令,这是一个很好的解决方法!