How to Find and Replace Text in a File on Linux

In Linux-based operating systems, there are many ways to search (find) and replace text in a file. Depending on the size of a file and the complexity of the find and replace operation, different tools and commands may be more appropriate. In this article, we'll learn several different methods of finding and replacing text in Linux environments.

Using the sed Command

The sed (stream editor) command line tool is a powerful utility that can be used to find and replace text in files on Linux. This tool performs text transformations and can operate in both interactive and non-interactive modes. To search and replace text using sed, you need to supply the search pattern and the replacement string.

Here's how to use sed to replace all occurrences of "make" with "cmake" in a file called "cmd.txt":

sed 's/make/cmake/g' cmd.txt > ncmd.txt

The 's/' indicates a substitution operation. The first argument "make" is the search string and "cmake" is the replacement string. The 'g' flag specifies global replacement (all occurrences), not just the first match. The output is redirected to a new file "ncmd.txt".

To modify the original file in-place, use the -i option:

sed -i 's/make/cmake/g' cmd.txt

Using the awk Command

The awk command is a versatile programming language often used for text processing and data transformation. It can also perform search and replace operations on files.

Here's how to use awk to replace all occurrences of "apple" with "banana" in a file called "fruits.txt":

awk '{gsub(/apple/, "banana"); print}' fruits.txt > latest_fruits.txt

The gsub() function performs a global substitution of the search pattern with the replacement string. The output is saved to a new file "latest_fruits.txt".

Using the vi/vim Editor

The vi (or vim) text editor provides an interactive way to find and replace text within files. This method is useful when you need to review changes before applying them.

First, open the file in vi:

vi file.txt

Once the file is open, press Esc to enter normal mode, then type the following command to perform find and replace:

:%s/oldword/newword/g

This command searches for all occurrences of "oldword" and replaces them with "newword" throughout the entire file. Remove the g flag to replace only the first occurrence on each line.

Using grep with sed

Combining grep and sed allows you to first identify files containing specific patterns, then perform replacements. This approach is useful when working with multiple files.

grep -l 'oldword' *.txt | xargs sed -i 's/oldword/newword/g'

This command first uses grep -l to list files containing "oldword", then pipes those filenames to sed via xargs to perform the replacement operation.

Using the perl Command

The Perl programming language provides powerful text processing capabilities, including in-line editing of files.

Here's how to use Perl for find and replace operations:

perl -pi -e 's/oldword/newword/g' file.txt

The -p flag tells Perl to loop through each line, -i enables in-place editing, and -e allows you to specify the Perl code on the command line. This command modifies the original file directly.

Comparison of Methods

Method Best For In-place Editing Complexity
sed Simple replacements, scripts Yes (with -i) Low
awk Complex pattern matching No (redirect output) Medium
vi/vim Interactive editing Yes Low
grep + sed Multiple files Yes (with -i) Medium
perl Complex regex operations Yes (with -i) High

Conclusion

Linux provides multiple powerful tools for finding and replacing text in files, each with its own strengths. sed is ideal for simple scripted replacements, vi/vim offers interactive control, and perl handles complex pattern matching. Choose the method that best fits your specific requirements and complexity needs.

Updated on: 2026-03-17T09:01:38+05:30

25K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements