"无效的命令代码." 同时尝试使用grep和sed替换多个文件中的字符串

jel*_*ola 12 unix macos shell grep sed

Unix(和SO)新手在这里试图弯曲我的新生命令行剁.

我正在尝试使用grep和sed扫描当前目录中的一堆文件,并将所有出现的字符串"192.168.1.1"替换为字符串"192.168.1.0",同时单独保留.git文件夹.

我尝试了以下方法:

grep -lr --exclude-dir=".git" "192.168.1.1" . | xargs sed -i 's/192.168.1.1/192.168.1.0/g' 
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

sed: 1: "./contact.html": invalid command code .
Run Code Online (Sandbox Code Playgroud)

如果有人能帮我弄清楚我的命令有什么问题,我真的很感激.

我也有兴趣了解一种更有效的方法来完成这项任务,特别是如果命令更简洁,更容易记住,只要它不涉及在perl/bash/etc中编写脚本,但我'我目前正试图深入研究sed和grep,我仍然有兴趣了解为什么这个命令不能正常工作,即使提供了一个工作替代方案.

anu*_*ava 23

将您的sed命令更改为:

 xargs sed -i.bak 's/192\.168\.1\.1/192\.168\.1\.0/g'
Run Code Online (Sandbox Code Playgroud)

OSX上的sed需要带有-i选项的有效文件扩展名.

  • `.bak`并不烦人,但是一个非常安全的功能,你可以恢复原始文件,以防出现问题.但如果你真的不想要它,那么使用:**`xargs sed -i''s/192.168.1.1/192.168.1.0/g'`** (6认同)