Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to do sed like text replace with python?

I would like to enable all apt repositories in this file

cat /etc/apt/sources.list ## Note, this file is written by cloud-init on first boot of an instance                                                                                                             ## modifications made here will not survive a re-bundle.                                                                                                                             ## if you wish to make changes you can:                                                                                                                                              ## a.) add 'apt_preserve_sources_list: true' to /etc/cloud/cloud.cfg                                                                                                                 ##     or do the same in user-data ## b.) add sources in /etc/apt/sources.list.d                                                                                                                                        #                                                                                                                                                                                     # See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to                                                                                                            # newer versions of the distribution.                                                                                                                                                deb http://us-east-1.ec2.archive.ubuntu.com/ubuntu/ maverick main                                                                                                                    deb-src http://us-east-1.ec2.archive.ubuntu.com/ubuntu/ maverick main                                                                                                                 ## Major bug fix updates produced after the final release of the                                                                                                                     ## distribution.                                                                                                                                                                     deb http://us-east-1.ec2.archive.ubuntu.com/ubuntu/ maverick-updates main                                                                                                            deb-src http://us-east-1.ec2.archive.ubuntu.com/ubuntu/ maverick-updates main                                                                                                         ## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu                                                                                                          ## team. Also, please note that software in universe WILL NOT receive any                                                                                                            ## review or updates from the Ubuntu security team.                                                                                                                                  deb http://us-east-1.ec2.archive.ubuntu.com/ubuntu/ maverick universe                                                                                                                deb-src http://us-east-1.ec2.archive.ubuntu.com/ubuntu/ maverick universe                                                                                                            deb http://us-east-1.ec2.archive.ubuntu.com/ubuntu/ maverick-updates universe deb-src http://us-east-1.ec2.archive.ubuntu.com/ubuntu/ maverick-updates universe  ## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu  ## team, and may not be under a free licence. Please satisfy yourself as to ## your rights to use the software. Also, please note that software in  ## multiverse WILL NOT receive any review or updates from the Ubuntu ## security team. # deb http://us-east-1.ec2.archive.ubuntu.com/ubuntu/ maverick multiverse # deb-src http://us-east-1.ec2.archive.ubuntu.com/ubuntu/ maverick multiverse # deb http://us-east-1.ec2.archive.ubuntu.com/ubuntu/ maverick-updates multiverse # deb-src http://us-east-1.ec2.archive.ubuntu.com/ubuntu/ maverick-updates multiverse  ## Uncomment the following two lines to add software from the 'backports' ## repository. ## N.B. software from this repository may not have been tested as ## extensively as that contained in the main release, although it includes ## newer versions of some applications which may provide useful features. ## Also, please note that software in backports WILL NOT receive any review ## or updates from the Ubuntu security team. # deb http://us-east-1.ec2.archive.ubuntu.com/ubuntu/ maverick-backports main restricted universe multiverse # deb-src http://us-east-1.ec2.archive.ubuntu.com/ubuntu/ maverick-backports main restricted universe multiverse  ## Uncomment the following two lines to add software from Canonical's ## 'partner' repository. ## This software is not part of Ubuntu, but is offered by Canonical and the ## respective vendors as a service to Ubuntu users. # deb http://archive.canonical.com/ubuntu maverick partner # deb-src http://archive.canonical.com/ubuntu maverick partner  deb http://security.ubuntu.com/ubuntu maverick-security main deb-src http://security.ubuntu.com/ubuntu maverick-security main deb http://security.ubuntu.com/ubuntu maverick-security universe deb-src http://security.ubuntu.com/ubuntu maverick-security universe # deb http://security.ubuntu.com/ubuntu maverick-security multiverse # deb-src http://security.ubuntu.com/ubuntu maverick-security multiverse 

With sed this is a simple sed -i 's/^# deb/deb/' /etc/apt/sources.list what's the most elegant ("pythonic") way to do this?

like image 888
Maxim Veksler Avatar asked Dec 13 '10 09:12

Maxim Veksler


People also ask

How do you replace text with another text in Python?

Python String | replace() replace() is an inbuilt function in the Python programming language that returns a copy of the string where all occurrences of a substring are replaced with another substring. Parameters : old – old substring you want to replace. new – new substring which would replace the old substring.

Does sed work in Python?

Description. pythonsed is a full and working Python implementation of sed.

How do you replace and match in Python?

subn() If you want to replace a string that matches a regular expression (regex) instead of perfect match, use the sub() of the re module. In re. sub() , specify a regex pattern in the first argument, a new string in the second, and a string to be processed in the third.


1 Answers

You can do that like this:

with open("/etc/apt/sources.list", "r") as sources:     lines = sources.readlines() with open("/etc/apt/sources.list", "w") as sources:     for line in lines:         sources.write(re.sub(r'^# deb', 'deb', line)) 

The with statement ensures that the file is closed correctly, and re-opening the file in "w" mode empties the file before you write to it. re.sub(pattern, replace, string) is the equivalent of s/pattern/replace/ in sed/perl.

Edit: fixed syntax in example

like image 68
David Miller Avatar answered Sep 28 '22 23:09

David Miller