find and replace in multiple files on command line

后端 未结 5 2081
予麋鹿
予麋鹿 2020-12-22 22:37

How do i find and replace a string on command line in multiple files on unix?

相关标签:
5条回答
  • 2020-12-22 22:55

    with recent bash shell, and assuming you do not need to traverse directories

    for file in *.txt
    do
    while read -r line
    do
        echo ${line//find/replace} > temp        
    done <"file"
    mv temp "$file"
    done 
    
    0 讨论(0)
  • 2020-12-22 22:56

    Like the Zombie solution (and faster I assume) but with sed (standard on many distros and OSX) instead of Perl :

    find . -name '*.py' | xargs sed -i .bak 's/foo/bar/g'
    

    This will replace all foo occurences in your Python files below the current directory with bar and create a backup for each file with the .py.bak extension.

    And to remove de .bak files:

    find . -name "*.bak" -delete
    
    0 讨论(0)
  • 2020-12-22 22:58

    I always did that with ed scripts or ex scripts.

    for i in "$@"; do ex - "$i" << 'eof'; done
    %s/old/new/
    x
    eof
    

    The ex command is just the : line mode from vi.

    0 讨论(0)
  • 2020-12-22 23:04

    Using find and sed with name or directories with space use this:

    find . -name '*.py' -print0 | xargs -0 sed -i 's/foo/bar/g'
    
    0 讨论(0)
  • 2020-12-22 23:08

    there are many ways .But one of the answers would be:

    find . -name '*.html' |xargs perl -pi -e 's/find/replace/g'
    
    0 讨论(0)
提交回复
热议问题