- Sed Examples: Search and Replace on Linux
- Replace string
- Replace regex
- Replace regex with match groups
- Replace whole lines matching pattern
- Delete lines matching pattern
- Replace newlines
- Replace one or more newlines
- Use with find: replace in current directory and under
- Escape single quotes
- How to Replace Everything after Pattern using `sed` Command
- Replace everything after the match in a string:
- Example-1: Replace all after the match using $PARTITION_COLUMN
- Example-2: Replace all after match using pattern
- Replace everything after the match in a file:
- Example -3: Replace all content from a line of a file after the match
- Example -4: Replace all content from the multiple lines of a file after the match
- Example-5: Replace all content from a line of a file using ‘c’ after the match
- Example-6: Replace all content from a line of a file based on starting and ending pattern
- Conclusion:
- About the author
- Fahmida Yesmin
- How to Find and Replace a String in File Using the sed Command in Linux
- What is sed Command
- 1) How to Find and Replace the “first” Event of the Pattern on a Line
- 2) How to Find and Replace the “Nth” Occurrence of the Pattern on a Line
- 3) How to Search and Replace all Instances of the Pattern in a Line
- 4) How to Find and Replace the Pattern for all Instances in a Line from the “Nth” Event
- 5) Search and Replace the pattern on a specific line number
- 6) How to Find and Replace Pattern in a Range of Lines
- 7) How to Find and Change the pattern in the Last Line
- 8) How to Find and Replace the Pattern with only Right Word in a Line
- 9) How to Search and Replaces the pattern with case insensitive
- 10) How to Find and Replace a String that Contains the Delimiter Character
- 11) How to Find and Replaces Digits with a Given Pattern
- 12) How to Find and Replace only two Digit Numbers with Pattern
- 13) How to Print only Replaced Lines with the sed Command
- 14) How to Run Multiple sed Commands at Once
- 15) How to Find and Replace the Entire Line if the Given Pattern Matches
- 16) How to Search and Replace lines that Matches a Pattern
Sed Examples: Search and Replace on Linux
Usage of sed is closely linked to that of find . Examples here focus on sed only.
To see different ways to use find , look at Linux find examples
Replace string
To modify the file in place, use sed -i instead
Replace all occurrences of foo with bar in my_file.txt.
Replace regex
sed uses extended posix regular expressions. Read more about those here
To modify the file in place, use sed -i -r in this case
The -r flag enables the use of extended posix regular expressions.
Example: replace all digits with dashes in the target file:
Replace regex with match groups
To modify the file in place, use sed -i -r instead
In order to use the results of a match in the «search» part in the «replace» part of the sed command, use «\»+match_number . For example, to add a ‘X’ to the end of all numbers in a file:
In this example, I’ve used \1 to match the first match group (match groups are stuff that’s between parentheses). If there were more, you could also use \2 , \3 and so on to represent the next matches.
Replace whole lines matching pattern
To modify the file in place, use sed -i instead
For example, replace the line that matches «FOO BAR» anywhere in it with «The quick brown fox jumps over the lazy dog»:
So if you had something like this:
It becomes this:
Delete lines matching pattern
To modify the file in place, use sed -i instead
Remove all lines that match the given pattern.
Replace newlines
sed is line-based, so it’s hard for it to work with newlines. Use tr instead
Although sed is line-based (so it doesn’t see across lines) there is a workaround to allow you to redefine what it considers a line.
Example: Replace newlines ( \n ) with whitespace:
Replace one or more newlines
It’s a variation of the above.
Example: Replace one or more newlines \n in file input.txt with whitespace
$ (sed -r ‘:a;N;$!ba;s/\n+/ /g’ | sed -r ‘s/\s+/ /g’) out.txt
Use with find: replace in current directory and under
For example, to replace all occurrences of «foo» with «bar» in all files in the current directory and under:
Note that the files are modified in place
Caution! «*.*» means all files! This also includes files like those under Code Versioning Tools, like SVN or GIT. Running this command on a directory that includes these files may break your repositories! use with caution!
Escape single quotes
Use double quotes as delimiters:
To modify the file in place, use sed -i instead
Источник
How to Replace Everything after Pattern using `sed` Command
Replacement tasks can be done in Linux in different ways. `sed` command is one of the ways to do replacement task. This command can be used to replace text in a string or a file by using a different pattern. How you can replace everything after the matching pattern using the `sed` command is shown in this tutorial.
Replace everything after the match in a string:
How the part of a string can be replaced based on a matching pattern and $PARTITION_COLUMN has been shown in this section of this tutorial. But this variable works if the pattern matches any word in the beginning or middle of the string. It will not replace the text if the pattern matches with the last word of the string.
Example-1: Replace all after the match using $PARTITION_COLUMN
The following command will search the character ‘a’, and the remaining part after ‘a’ will be replaced by the text, “a popular blog site”. $PARTITION_COLUMN.* is used to define the remaining part after the character, ‘a’.
The following output will appear after running the command. Here, ‘a website’ has been replaced by ‘a popular blog site’.
The following pattern will search the word ‘web’ in the string and replace the remaining part with the ‘web‘ by the text, ‘a popular blog site‘ if the match exists and ‘web‘ is not the part of the last word of the string.
The following output will appear after running the command. Here, ‘website’ is the last word of the string, and no replacement has been done for this reason.
Example-2: Replace all after match using pattern
The following command will search the word ‘bash‘ globally in the string and replace everything with the word if the word exists in the string. ‘g‘ is used here for global search.
The following output will appear after running the command. Here, ‘bash’ exists in the middle of the string, and the replacement has been done.
Replace everything after the match in a file:
All content of a particular line or multiple lines or remaining lines of a file after the match can be replaced using the `sed` command. Create a text file named attendance.txt with the following content to test the examples shown in this section.
attendance.txt
1108885 is present
1999979 is present
1769994 is absent
1105656 is absent
1455999 is absent
Example -3: Replace all content from a line of a file after the match
The following `sed` command will search the number 1769994 in the file, and everything with the number will be replaced by the text, ‘1586844 is present’ if the number exists in any line of the file.
$ sed «s/1769994.*/1586844 is present/» attendance.txt
The following output will appear running the commands. Here, the searching number exists in the third line of the file, and the replacement has been done.
Example -4: Replace all content from the multiple lines of a file after the match
The following `sed` command shows the use of the $PARTITION_COLUMN variable to replace multiple lines from the file. The command will search ‘110’ at the starting of each line of the file and replace everything with ‘110’ by the text ‘Invalid Entry’ where the matching text will be found.
$ sed «s/^110.* $PARTITION_COLUMN .*/Invalid Entry/» attendance.txt
The following output will appear after running the commands. ‘110’ exists in two lines of the file, and these have been replaced by the replacing text.
Example-5: Replace all content from a line of a file using ‘c’ after the match
The following `sed` command shows the use of ‘c‘ to replace everything after the match. Here, ‘c‘ indicates the change. The command will search the word ‘present‘ in the file and replace everything of the line with the text, ‘This line is replaced‘ if the word exists in any line of the file.
$ sed ‘/present/c This line is replaced ‘ attendance.txt
The following output will appear after running the commands. The word ‘present’ exists in the first two lines of the file, and these two lines have been replaced by the replacing text.
Example-6: Replace all content from a line of a file based on starting and ending pattern
Sometimes it is required to replace text based on the starting and ending pattern. The following `sed` command shows the way to define starting and ending patterns to replace lines from a file. The command will search those lines in the file that starts with the number 110 and ends with the word ‘absent’ and replace everything with the word ‘replaced’ where the patterns match.
$ sed -e ‘s/^110.*absent$/replaced/g’ attendance.txt
The following output will appear after running the commands. Here, the first and the fourth lines start with the number 110, but the word ‘absent’ exists in the fourth line only. So, the fourth line of the file has been replaced by the replacing text.
Conclusion:
`sed` command is a very powerful tool of Linux to perform different types of text processing related tasks. The replacement task based on the matching pattern is discussed in this tutorial by using various types of patterns in the `sed` command. $PARTITION_COLUMN, ‘c’, and ‘.*’ is used in this tutorial to replace everything of a line of the file where the matching pattern exists. The uses of some characters of defining patterns have shown here, such as ‘^’ and ‘$’. Many other characters exist to define the pattern in regular expression for searching purposes. I hope this tutorial will help the reader to know the basics of replacing everything from a file after the match.
About the author
Fahmida Yesmin
I am a trainer of web programming courses. I like to write article or tutorial on various IT topics. I have a YouTube channel where many types of tutorials based on Ubuntu, Windows, Word, Excel, WordPress, Magento, Laravel etc. are published: Tutorials4u Help.
Источник
How to Find and Replace a String in File Using the sed Command in Linux
When you are working on text files you may need to find and replace a string in the file.
Sed command is mostly used to replace the text in a file.
This can be done using the sed command and awk command in Linux.
In this tutorial, we will show you how to do this using the sed command and then show about the awk command.
What is sed Command
Sed command stands for Stream Editor, It is used to perform basic text manipulation in Linux. It could perform various functions such as search, find, modify, insert or delete files.
Also, it’s performing complex regular expression pattern matching.
It can be used for the following purpose.
- To find and replace matches with a given format.
- To find and replace specific lines that match a given format.
- To find and replace the entire line that matches the given format.
- To search and replace two different patterns simultaneously.
The fifteen examples listed in this article will help you to master in the sed command.
If you want to remove a line from a file using the Sed command, go to the following article.
Note: Since this is a demonstration article, we use the sed command without the -i option, which removes lines and prints the contents of the file in the Linux terminal.
But if you want to remove lines from the source file in the real environment, use the -i option with the sed command.
Common Syntax for sed to replace a string.
First we need to understand sed syntax to do this. See details about it.
- sed: It’s a Linux command.
- -i: It’s one of the option for sed and what it does? By default sed print the results to the standard output. When you add this option with sed then it will edit files in place. A backup of the original file will be created when you add a suffix (For ex, -i.bak
- s: The s is the substitute command.
- Search_String: To search a given string or regular expression.
- Replacement_String: The replacement string.
- g: Global replacement flag. By default, the sed command replaces the first occurrence of the pattern in each line and it won’t replace the other occurrence in the line. But, all occurrences will be replaced when the replacement flag is provided
- / Delimiter character.
- Input_File: The filename that you want to perform the action.
Let us look at some examples of commonly used with sed command to search and convert text in files.
We have created the below file for demonstration purposes.
1) How to Find and Replace the “first” Event of the Pattern on a Line
The below sed command replaces the word unix with linux in the file. This only changes the first instance of the pattern on each line.
2) How to Find and Replace the “Nth” Occurrence of the Pattern on a Line
Use the /1,/2. /n flags to replace the corresponding occurrence of a pattern in a line.
The below sed command replaces the second instance of the “unix” pattern with “linux” in a line.
3) How to Search and Replace all Instances of the Pattern in a Line
The below sed command replaces all instances of the “unix” format with “Linux” on the line because “g” means a global replacement.
4) How to Find and Replace the Pattern for all Instances in a Line from the “Nth” Event
The below sed command replaces all the patterns from the “Nth” instance of a pattern in a line.
5) Search and Replace the pattern on a specific line number
You can able to replace the string on a specific line number. The below sed command replaces the pattern “unix” with “linux” only on the 3rd line.
6) How to Find and Replace Pattern in a Range of Lines
You can specify the range of line numbers to replace the string.
The below sed command replaces the “Unix” pattern with “Linux” with lines 1 through 3.
7) How to Find and Change the pattern in the Last Line
The below sed command allows you to replace the matching string only in the last line.
The below sed command replaces the “Linux” pattern with “Unix” only on the last line.
8) How to Find and Replace the Pattern with only Right Word in a Line
As you might have noticed, the substring “linuxunix” is replaced with “linuxlinux” in the 6th example. If you want to replace only the right matching word, use the word-boundary expression “\b” on both ends of the search string.
9) How to Search and Replaces the pattern with case insensitive
Everyone knows that Linux is case sensitive. To make the pattern match with case insensitive, use the I flag.
10) How to Find and Replace a String that Contains the Delimiter Character
When you search and replace for a string with the delimiter character, we need to use the backslash “\” to escape the slash.
In this example, we are going to replaces the “/bin/bash” with “/usr/bin/fish”.
The above sed command works as expected, but it looks bad. To simplify this, most of the people will use the vertical bar “|”. So, I advise you to go with it.
11) How to Find and Replaces Digits with a Given Pattern
Similarly, digits can be replaced with pattern. The below sed command replaces all digits with “5” “number” pattern.
12) How to Find and Replace only two Digit Numbers with Pattern
If you want to replace the two digit numbers with the pattern, use the sed command below.
13) How to Print only Replaced Lines with the sed Command
If you want to display only the changed lines, use the below sed command.
- p – It prints the replaced line twice on the terminal.
- n – It suppresses the duplicate rows generated by the “p” flag.
14) How to Run Multiple sed Commands at Once
The following sed command detect and replaces two different patterns simultaneously.
The below sed command searches for “linuxunix” and “CentOS” pattern, replacing them with “LINUXUNIX” and “RHEL8” at a time.
The following sed command search for two different patterns and replaces them with one string at a time.
The below sed command searches for “linuxunix” and “CentOS” pattern, replacing them with “Fedora30” at a time.
15) How to Find and Replace the Entire Line if the Given Pattern Matches
If the pattern matches, you can use the sed command to replace the entire line with the new line. This can be done using the “C” flag.
16) How to Search and Replace lines that Matches a Pattern
You can specify a pattern for the sed command to fit on a line. In the event of pattern matching, the sed command searches for the string to be replaced.
The below sed command first looks for lines that have the “OS” pattern, then replaces the word “Linux” with “ArchLinux”.
Источник