How to Change All Occurrences of a Word in All Files in a Directory

How to change all occurrences of a word in all files in a directory

A variation that takes into account subdirectories (untested):

find /var/www -type f -exec sed -i 's/privelages/privileges/g' {} \;

This will find all files (not directories, specified by -type f) under /var/www, and perform a sed command to replace "privelages" with "privileges" on each file it finds.

How do I find and replace all occurrences (in all files) in Visual Studio Code?

Since version 1.3 of vscode this is possible

  1. Navigate to the search, click icon to the left or:
    • (mac) cmd + shift + h
    • (PC) ctrl + shift + h
  2. expand replace
  3. enter search term and replace term
  4. confirm!

Search and replace with vscode

How to replace a string in multiple files in linux command line

cd /path/to/your/folder
sed -i 's/foo/bar/g' *

Occurrences of "foo" will be replaced with "bar".

On BSD systems like macOS, you need to provide a backup extension like -i '.bak' or else "risk corruption or partial content" per the manpage.

cd /path/to/your/folder
sed -i '.bak' 's/foo/bar/g' *

I want to search a directory and replace all occurrences of a word in emacs

Burton's answer is as easy as it gets. Here's one way to do it in Emacs:

M-x dired fill in the directory you want to work in

* s marks all files in the directory

Q runs query-replace-regex on all marked files. Fill in the search regex and the replace string.

Type ! to replace all occurrences in each file. You will have to go back to save the changes though.

Changing all occurrences in a folder

There is no way to do it using only sed. You'll need to use at least the find utility together:

find . -type f -exec sed -i.bak "s/foo/bar/g" {} \;

This command will create a .bak file for each changed file.

Notes:

  • The -i argument for sed command is a GNU extension, so, if you are running this command with the BSD's sed you will need to redirect the output to a new file then rename it.
  • The find utility does not implement the -exec argument in old UNIX boxes, so, you will need to use a | xargs instead.

How can I replace all instances of a string in my entire home directory?

sed is your friend.

$ sed -i 's_github.com/retep-mathwizard/utils/src_github.com/retep-mathwizard/utils_g' *.txt

Where *.txt is whatever text files you want to search/replace. Note that the _ is important. It's used to separate the patterns in the search-and-replace, because you have both the standard / separator and the oft-used alternative - in your pattern. The -i.bak option will tell sed to edit the files in place, and save a backup copy with the extension .bak.

If the files are in many subdirectories, you'll need to use a combo like find and xargs.

$ find ~ -name "*.txt" -print0 | xargs -0 sed -i.bak 's_github.com/retep-mathwizard/utils/src_github.com/retep-mathwizard/utils_g' 

Again, *.txt is whatever regex will find only those files you want to replace text in.

DISCLAIMER: As with anything involving these tools, you should try this out on something replaceable or in a new git branch first.

EDIT: Removed extension on -i flag. As pointed out in the comments, everything is under source control, so it should be fine to do in-place editing without saving a backup file.

How can I replace a word all the files within a folder in Vim?

Open Vim with all the files loaded into buffers, and do the replace on all buffers at once with bufdo:

% vim *
... when vim has loaded:
:bufdo %s/iwanthis/replacedbythis/g | w

The | w will write each file back to disk.

Search and replace text in all files of a linux directory

The following will do it:

sed -i 's/old_link/new_link/g' file...

Don't forget to escape any slashes, dots, and any other regex special chars in the link addresses with a backslash.



Related Topics



Leave a reply



Submit