Linux - NewbieThis Linux forum is for members that are new to Linux.
Just starting out and have a question?
If it is not in the man pages or the how-to's this is the place!
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
I want to replace "hello test" with "Hello this is test" in a file called "TODAYSTST".But there are many other lines in the same file which is having "hello test".But I would like to replace only the first occurence"hello test" using sed.
Please could anyone help me in this using sed command options.
Well, from some searching and experimentation, this seems to work:
Code:
sed '0,/hello test/s//Hello this is test/' TODAYSTST
though I haven't yet worked out why it works... The '0,/hello test/' means it's only going to apply the substitution up to the first occurence of 'hello test', and my guess would be that the pattern then defaults to 'hello test' for some reason in the substitution.
sed '0,/hello test/s//Hello this is test/' TODAYSTST
I think this is not complete correct. Better would be
Code:
sed '0,/.*hello test/s/hello test/Hello this is test/' TODAYSTST
0,/.*hello test/ is the Lineadress for the substitution. It means from the first line to the fist line which contains "hello test" at least one time.
s/hello test/Hello this is test/ substitute then in that Linegroup the text "hello test" with "Hello this is test" one time.
sed '0,/hello test/s//Hello this is test/' TODAYSTST
I think this is not complete correct. Better would be
Code:
sed '0,/.*hello test/s/hello test/Hello this is test/' TODAYSTST
0,/.*hello test/ is the Lineadress for the substitution. It means from the first line to the fist line which contains "hello test" at least one time.
s/hello test/Hello this is test/ substitute then in that Linegroup the text "hello test" with "Hello this is test" one time.
Have you actually tried this?
Using the file
Quote:
First line
second hello test line
third line hello test
hello test fourth line
my example works perfectly. You certainly don't need the '.*' (because it already matches anywhere on the line), and although you're correct that we are performing 's/hello test/Hello this is test/', it seems to default to the string we searched for.
sed '0,/hello test/s//Hello this is test/' TODAYSTST
I think this is not complete correct. Better would be
Code:
sed '0,/.*hello test/s/hello test/Hello this is test/' TODAYSTST
0,/.*hello test/ is the Lineadress for the substitution. It means from the first line to the fist line which contains "hello test" at least one time.
s/hello test/Hello this is test/ substitute then in that Linegroup the text "hello test" with "Hello this is test" one time.
The first command is correct. It is just shorthand for the second.
when the arguement you are searching for is the same as the argument you want to replace you can omit the second instance of it.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.