Can you mass edit all files returned in a grep?

后端 未结 6 2033
失恋的感觉
失恋的感觉 2020-12-24 04:35

I want to mass-edit a ton of files that are returned in a grep. (I know, I should get better at sed).

So if I do:

grep -rnI \'xg_icon-*\'


        
相关标签:
6条回答
  • 2020-12-24 05:22

    A nice general solution to this is to use xargs to convert a stdout from a process like grep to an argument list.

    A la:

    grep -rIl 'xg_icon-*' | xargs vi
    
    0 讨论(0)
  • 2020-12-24 05:22

    if what you want to edit is similar across all files, then no point using vi to do it manually. (although vi can be scripted as well), hypothetically, it looks something like this, since you never mention what you want to edit

    grep -rnI 'xg_icon-*' | while read FILE
    do
        sed -i.bak 's/old/new/g' $FILE # (or other editing commands, eg awk... )
    done
    
    0 讨论(0)
  • 2020-12-24 05:25
    vi `grep -l -i findthisword *`
    
    0 讨论(0)
  • 2020-12-24 05:31

    The easiest way is to have grep return just the filenames (-l instead of -n) that match the pattern. Run that in a subshell and feed the results to Vim.

    vim $(grep -rIl 'xg_icon-*' *)
    
    0 讨论(0)
  • 2020-12-24 05:41

    if you use vim and the -p option, it will open each file in a tab, and you can switch between them using gt or gT, or even the mouse if you have mouse support in the terminal

    0 讨论(0)
  • 2020-12-24 05:42

    You can do it without any processing of the grep output! This will even enable you to go the the right line (using :help quickfix commands, eg. :cn or :cw). So, if you are using bash or zsh:

    vim -q <(grep foo *.c)
    
    0 讨论(0)
提交回复
热议问题