Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 使用SED替换与正则表达式匹配的文件或行中的内容_Shell_Unix_Sed - Fatal编程技术网

Shell 使用SED替换与正则表达式匹配的文件或行中的内容

Shell 使用SED替换与正则表达式匹配的文件或行中的内容,shell,unix,sed,Shell,Unix,Sed,如何使用SED命令替换文件中的行/部分行 search_text_1_server=value.env_1.path_to_file search_text_2_server=value.env_1.path_to_file search_text_3_server=value.env_1.path_to_file some_other_key=value.env_1.another_path 现在我需要一个sed命令来查找与正则表达式search_text{any}\u服务器匹配的行,然后用

如何使用SED命令替换文件中的行/部分行

search_text_1_server=value.env_1.path_to_file
search_text_2_server=value.env_1.path_to_file
search_text_3_server=value.env_1.path_to_file
some_other_key=value.env_1.another_path
现在我需要一个sed命令来查找与正则表达式
search_text{any}\u服务器匹配的行,然后用env_2替换env_1

找到正则表达式以查找所需的行

^搜索文本[a-z]\*\u服务器。*$

现在,如何添加要替换的SED语法


附言:我不是shell方面的专家

你的正则表达式很接近。您可以使用:

sed -E 's/^(search_text_[a-z_]*_server=.*)env_1\./\1env_2\./' file

search_text_1_server=value.env_2.path_to_file
search_text_2_server=value.env_2.path_to_file
search_text_3_server=value.env_2.path_to_file
some_other_key=value.env_1.another_path

假设国家代码是两个字母,你可以这样做

sed -Ei 's/(search_text_[a-z]{2}_server=value\.)env_1/\1env_2/' file
我应该这样做


这里发生了什么事

  • [a-z]{2}
    检查构成国家代码的两个字母
  • sed
    s
    命令用于替换->
    s/pattern/replacement
  • ()
    选择匹配的正则表达式模式以供重用,注意
    \1
    以供重用
  • -i
    sed
    的就地编辑选项,它使文件中的更改永久化

  • 我们不为你做家庭作业。试试看。如果你不能让它发挥作用,请公布你所做的事情和你遇到的问题,我们将尽力帮助你。@RobertColumbia我在做了自己的研究后问过你。注意:请不要改变这样一个老问题,尝试回答你的问题中甚至没有提到的问题。我建议你问一个新问题,并回滚你的最新更改。@anubhava我不是在回答一个没有被问到的问题。我正在为我自己的问题提供答案。@anubhava我把你的答案标记了回去,也删除了我的答案。我想你可以把我的问题投回去,这很有效。它以我想要的方式显示在控制台上,以便在mac终端上工作
    sed-i''s/^\(search-text'.[1-9'.*.\u server=.*)env_1\./\1env_2\./'test.txt
    -E
    也可以在OSX上工作,因此
    sed-i'.-E/^(search-text'.[a-z'.*.\u server=.*)env_1\/\1env_2\./'文件也可以工作