Saturday, 7 December 2019

ssh - Find and Replace Inside a Text File from a Bash Command




What's the simplest way to do a find and replace for a given input string, say abc, and replace with another string, say XYZ in file /tmp/file.txt?



I am writting an app and using IronPython to execute commands through SSH — but I don't know Unix that well and don't know what to look for.



I have heard that Bash, apart from being a command line interface, can be a very powerful scripting language. So, if this is true, I assume you can perform actions like these.



Can I do it with bash, and what's the simplest (one line) script to achieve my goal?


Answer



The easiest way is to use sed (or perl):




sed -i -e 's/abc/XYZ/g' /tmp/file.txt


Which will invoke sed to do an in-place edit due to the -i option. This can be called from bash.



If you really really want to use just bash, then the following can work:



while read a; do
echo ${a//abc/XYZ}

done < /tmp/file.txt > /tmp/file.txt.t
mv /tmp/file.txt{.t,}


This loops over each line, doing a substitution, and writing to a temporary file (don't want to clobber the input). The move at the end just moves temporary to the original name.


No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print ...