Table of Contents

BASH - Files - Replace all occurrences of string within a file

Using awk

Find and replace “dog” or “cat” or “bird” with “pet” on every line and print it out.

awk '{gsub(/dog|cat|bird,"pet");print}' filename

Find and replace “dog” with “cat” in every file with extension txt.

awk '{gsub("dog", "cat", $0); print > FILENAME}' *.txt

Find cat by itself on it's own line even if there are spaces or tabs before it or after it. Replace it with dog. Then print the line.

awk '{sub(/^[ \t]*cat .*$/,"dog");print}' filename

Substitute “dog” with “cat” on lines that don't contain the word “pet”.

awk '!/pet/{gsub(/dog/, "cat")};{print}' filename

Using sed

Change all references of the word dog to cat in the file:

sed -e 's/dog/cat/g' filename

This uses sed to stream edit files, which means change them on the fly.

Find every line that begins with cat. In that line replace furry with nothing. Change the file called filename inline (-i).

sed -i '/^cat/{s/furry//}' filename

Find any line starting with the defined shell variable SHELLVAR (notice ' ' around it so it's evaluated). When the line is found substitute in foo or boo or coo with bar. Edit the file inline.

sed -i '/^'${SHELLVAR}'/s/\(foo\|boo\|coo\)/bar/' filename

Replace spaces in a file with hyphens

sed -i 's/ /-/g' *