Bash Shell: Replace a string with another string in all files using sed and perl -pie
Q. How do I replace a string with another string in all files? For example, ~/foo directory has 100s of text file and I'd like to find out xyz string and replace with abc. I'd like to use sed or any other tool to replace all occurrence of the word.
A.sed command is designed for this kind of work i.e. replace strings.
sed replace word / string syntax
sed -i 's/old-word/new-word/g' *.txt
GNU sed command can edit files in place (makes backup if extension supplied) using -i option. If you are using old or UNIX sed command try the following syntax:
sed 's/old/new/g' input.txt > output.txt
I recommend using old syntax along with for loop:
#!/bin/bash
OLD="xyz"
NEW="abc"
DPATH="/home/you/foo/*.txt"
BPATH="/home/you/bakup/foo"
TFILE="/tmp/out.tmp.$$"
[ ! -d $BPATH ] && mkdir -p $BPATH || :
for f in $DPATH
do
if [ -f $f -a -r $f ]; then
/bin/cp -f $f $BPATH
sed "s/$OLD/$NEW/g" "$f" > $TFILE && mv $TFILE "$f"
else
echo "Error: Cannot read $f"
fi
done
/bin/rm $TFILE
perl -pie trick
perl -pie 's/old-word/new-word/g' input > output
Subscribe to our free e-mail newsletter or RSS feed to get all updates.
You can Email this page to a friend.
Related Linux / UNIX FAQ:
- UNIX / Linux: vi / vim perform search and replace operation
- Search Multiple Words / String Pattern Using grep Command
- Howto use grep command in Linux / UNIX
- Finding a File containing a particular text string in Linux server
- Search all the Linux man pages for a particular command or text
Discussion on This FAQ
Leave a Reply
We encourage your comments, and suggestions. But please stay on topic, be polite, and avoid spam. Please do not use the comment form to ask for help / question. Ask your question on the excellent Linux tech support forum. Thank you very much for stopping by our site!
Tags: gnu sed, perl -pie, perl replace words, perl_command, replace word string, sed replace words, sed_command, shell script replace strings, shell script replace words ~ Last updated on: November 27, 2007




November 27th, 2007 at 7:36 pm
Ravi,
Glancing at this I see a typo:
sed “s/$OLD/$NEW/g” “$f” > $TFILE && mv TFILE “$f”
Should be:
sed “s/$OLD/$NEW/g” “$f” > $TFILE && mv $TFILE “$f”
Also, you didn’t seem to mention that sed can auto-create backup files using syntax like this:
sed -i.bak ’s/old-word/new-word/g’ filename.txt
That will edit filename.txt and copy the original to filename.txt.bak
November 27th, 2007 at 7:44 pm
Jeff,
thanks for the heads up!
December 3rd, 2007 at 7:25 am
Hi,
I don’t know normal sed has -i.bak option but perl provides the backup of the original file.
perl -p -i.bak -e ’s/AAA/aaa/’ file_name