Bash UNIX Sed和反向字符串搜索

Bash UNIX Sed和反向字符串搜索,bash,unix,sed,Bash,Unix,Sed,我有一个简单的(至少我认为是)分配,我必须使用sed在文件中用我的用户名替换字符串。假设it内容如下所示: 1) 2) 3) 3) www www 3) 3) 7) 作业分为三部分: -将“3”替换为您的用户名。此命令工作正常: sed -e "s/3)/$USER/" file -仅在带有“www”字符串的行中将“3”替换为您的id。通过一些小的改进,第一部分的命令也完成了任务: sed -e "/www/ s/3)/$USER/" file 在作业的最后一部分,我必须在没有“w

我有一个简单的(至少我认为是)分配,我必须使用sed在文件中用我的用户名替换字符串。假设it内容如下所示:

1)
2)
3)
3) www
www 3)
3)
7)
作业分为三部分:

-将“3”替换为您的用户名。此命令工作正常:

  sed -e "s/3)/$USER/" file
-仅在带有“www”字符串的行中将“3”替换为您的id。通过一些小的改进,第一部分的命令也完成了任务:

  sed -e "/www/ s/3)/$USER/" file
在作业的最后一部分,我必须在没有“www”的行中用我的id替换3)。有没有一种简单的方法可以使用sed反向搜索字符串?到目前为止,我已经想出了一个想法来否定“[]”中的一组3个字符,但遗憾的是,它并没有真正起作用

  sed -e "/[^/(www/)]/ s/3)/$USER/" file

使用
在地址后面。请注意,大多数shell使用!作为历史扩展字符,因此必须正确引用:

sed -e '/www/!s/3)/'"$USER/" file

使用
在地址后面。请注意,大多数shell使用!作为历史扩展字符,因此必须正确引用:

sed -e '/www/!s/3)/'"$USER/" file

在我修复了报价后,您的解决方案非常有效sed-e“/www/!s/3)/$USER/”文件谢谢!我只是出于好奇问:如果其余部分是单引号,有没有办法让shell仅将$USER部分解释为变量?如果我尝试使用'/www/!s/3)/“$USER/”,shell在命令行上将$USER解释为普通字符串!在双引号中仍然是特别的。引号不嵌套在bash中,但您只需要引用)和用户名,因此
/www/!s/3')/“$USER”/
应该可以使用。所以每次我使用s///时,只有shell可能解释为特殊的字符需要用单引号括起来,如果没有,我可以完全跳过它们?这与s///无关,这就是shell引号的工作方式。有些字符是shell的专用字符,需要加引号。在我修复了引号后,您的解决方案非常有效sed-e“/www/!s/3)/$USER/”文件谢谢!我只是出于好奇问:如果其余部分是单引号,有没有办法让shell仅将$USER部分解释为变量?如果我尝试使用'/www/!s/3)/“$USER/”,shell在命令行上将$USER解释为普通字符串!在双引号中仍然是特别的。引号不嵌套在bash中,但您只需要引用)和用户名,因此
/www/!s/3')/“$USER”/
应该可以使用。所以每次我使用s///时,只有shell可能解释为特殊的字符需要用单引号括起来,如果没有,我可以完全跳过它们?这与s///无关,这就是shell引号的工作方式。有些字符是shell的专用字符,需要引用。