sed/awk string replacement with newline and tabs
up vote
-2
down vote
favorite
I have an XML file that contains the following:
<ipaddr>192.168.1.1</ipaddr>
<subnet>24</subnet>
The goal is to modify <ipaddr>192.168.1.1</ipaddr>
to <ipaddr>192.168.1.125</ipaddr>
and <subnet>24</subnet>
to <subnet>25</subnet>
in one command. I do not want to change any other subnet tags inside the file.
The problem I have encountered is that there is a newline after </ipaddr>
and there are two tabs before <subnet>
.
I have tried this: awk '{gsub (/<ipaddr>192.168.1.1</ipaddr>n<subnet>24</subnet>/, "<ipaddr>192.168.1.125</ipaddr>ntt<subnet>25</subnet>")}' config.xml
but it does not work.
Could someone guide me in the right direction for this?
text-processing awk sed xml
New contributor
add a comment |
up vote
-2
down vote
favorite
I have an XML file that contains the following:
<ipaddr>192.168.1.1</ipaddr>
<subnet>24</subnet>
The goal is to modify <ipaddr>192.168.1.1</ipaddr>
to <ipaddr>192.168.1.125</ipaddr>
and <subnet>24</subnet>
to <subnet>25</subnet>
in one command. I do not want to change any other subnet tags inside the file.
The problem I have encountered is that there is a newline after </ipaddr>
and there are two tabs before <subnet>
.
I have tried this: awk '{gsub (/<ipaddr>192.168.1.1</ipaddr>n<subnet>24</subnet>/, "<ipaddr>192.168.1.125</ipaddr>ntt<subnet>25</subnet>")}' config.xml
but it does not work.
Could someone guide me in the right direction for this?
text-processing awk sed xml
New contributor
add a comment |
up vote
-2
down vote
favorite
up vote
-2
down vote
favorite
I have an XML file that contains the following:
<ipaddr>192.168.1.1</ipaddr>
<subnet>24</subnet>
The goal is to modify <ipaddr>192.168.1.1</ipaddr>
to <ipaddr>192.168.1.125</ipaddr>
and <subnet>24</subnet>
to <subnet>25</subnet>
in one command. I do not want to change any other subnet tags inside the file.
The problem I have encountered is that there is a newline after </ipaddr>
and there are two tabs before <subnet>
.
I have tried this: awk '{gsub (/<ipaddr>192.168.1.1</ipaddr>n<subnet>24</subnet>/, "<ipaddr>192.168.1.125</ipaddr>ntt<subnet>25</subnet>")}' config.xml
but it does not work.
Could someone guide me in the right direction for this?
text-processing awk sed xml
New contributor
I have an XML file that contains the following:
<ipaddr>192.168.1.1</ipaddr>
<subnet>24</subnet>
The goal is to modify <ipaddr>192.168.1.1</ipaddr>
to <ipaddr>192.168.1.125</ipaddr>
and <subnet>24</subnet>
to <subnet>25</subnet>
in one command. I do not want to change any other subnet tags inside the file.
The problem I have encountered is that there is a newline after </ipaddr>
and there are two tabs before <subnet>
.
I have tried this: awk '{gsub (/<ipaddr>192.168.1.1</ipaddr>n<subnet>24</subnet>/, "<ipaddr>192.168.1.125</ipaddr>ntt<subnet>25</subnet>")}' config.xml
but it does not work.
Could someone guide me in the right direction for this?
text-processing awk sed xml
text-processing awk sed xml
New contributor
New contributor
edited 2 days ago
New contributor
asked Dec 5 at 19:44
Jay
12
12
New contributor
New contributor
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
up vote
0
down vote
This is quite incomplete a specification. What are we going to search for? Some generic pattern? The exact IP address, and exact subnet? If yes, try
$ sed -r '/(192.168.1.)1/{s//1125/; N; s/24/25/}' file
<ipaddr>192.168.1.125</ipaddr>
<subnet>25</subnet>
If the IP is changed to124
it will be again changed to125
by the next substitution. Also, better use a limited subnet to be precise. Think what will hapen if the original subnet is 24 and the subnet change is4
to8
(for example). Finally, using-E
is POSIX compliant (and portable).
– Isaac
2 days ago
add a comment |
up vote
0
down vote
Assuming that you want to change the IP on one line and the sub-net on the next line:
sed -E '/(192.168.1.)1/{s//1125/; n; s/>24</>25</}' infile
That is not reporting any error if the IP is changed but the sub-net is not. Which seems to be what you want from your description.
This is exactly what I was looking for. Is n; the match for newline in this command?
– Jay
yesterday
Not exactly,n
tells sed to read the next line from the file, then this line is matched. The end effect is that a newline must exist for this to match.
– Isaac
yesterday
add a comment |
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
This is quite incomplete a specification. What are we going to search for? Some generic pattern? The exact IP address, and exact subnet? If yes, try
$ sed -r '/(192.168.1.)1/{s//1125/; N; s/24/25/}' file
<ipaddr>192.168.1.125</ipaddr>
<subnet>25</subnet>
If the IP is changed to124
it will be again changed to125
by the next substitution. Also, better use a limited subnet to be precise. Think what will hapen if the original subnet is 24 and the subnet change is4
to8
(for example). Finally, using-E
is POSIX compliant (and portable).
– Isaac
2 days ago
add a comment |
up vote
0
down vote
This is quite incomplete a specification. What are we going to search for? Some generic pattern? The exact IP address, and exact subnet? If yes, try
$ sed -r '/(192.168.1.)1/{s//1125/; N; s/24/25/}' file
<ipaddr>192.168.1.125</ipaddr>
<subnet>25</subnet>
If the IP is changed to124
it will be again changed to125
by the next substitution. Also, better use a limited subnet to be precise. Think what will hapen if the original subnet is 24 and the subnet change is4
to8
(for example). Finally, using-E
is POSIX compliant (and portable).
– Isaac
2 days ago
add a comment |
up vote
0
down vote
up vote
0
down vote
This is quite incomplete a specification. What are we going to search for? Some generic pattern? The exact IP address, and exact subnet? If yes, try
$ sed -r '/(192.168.1.)1/{s//1125/; N; s/24/25/}' file
<ipaddr>192.168.1.125</ipaddr>
<subnet>25</subnet>
This is quite incomplete a specification. What are we going to search for? Some generic pattern? The exact IP address, and exact subnet? If yes, try
$ sed -r '/(192.168.1.)1/{s//1125/; N; s/24/25/}' file
<ipaddr>192.168.1.125</ipaddr>
<subnet>25</subnet>
answered Dec 5 at 22:15
RudiC
3,7171312
3,7171312
If the IP is changed to124
it will be again changed to125
by the next substitution. Also, better use a limited subnet to be precise. Think what will hapen if the original subnet is 24 and the subnet change is4
to8
(for example). Finally, using-E
is POSIX compliant (and portable).
– Isaac
2 days ago
add a comment |
If the IP is changed to124
it will be again changed to125
by the next substitution. Also, better use a limited subnet to be precise. Think what will hapen if the original subnet is 24 and the subnet change is4
to8
(for example). Finally, using-E
is POSIX compliant (and portable).
– Isaac
2 days ago
If the IP is changed to
124
it will be again changed to 125
by the next substitution. Also, better use a limited subnet to be precise. Think what will hapen if the original subnet is 24 and the subnet change is 4
to 8
(for example). Finally, using -E
is POSIX compliant (and portable).– Isaac
2 days ago
If the IP is changed to
124
it will be again changed to 125
by the next substitution. Also, better use a limited subnet to be precise. Think what will hapen if the original subnet is 24 and the subnet change is 4
to 8
(for example). Finally, using -E
is POSIX compliant (and portable).– Isaac
2 days ago
add a comment |
up vote
0
down vote
Assuming that you want to change the IP on one line and the sub-net on the next line:
sed -E '/(192.168.1.)1/{s//1125/; n; s/>24</>25</}' infile
That is not reporting any error if the IP is changed but the sub-net is not. Which seems to be what you want from your description.
This is exactly what I was looking for. Is n; the match for newline in this command?
– Jay
yesterday
Not exactly,n
tells sed to read the next line from the file, then this line is matched. The end effect is that a newline must exist for this to match.
– Isaac
yesterday
add a comment |
up vote
0
down vote
Assuming that you want to change the IP on one line and the sub-net on the next line:
sed -E '/(192.168.1.)1/{s//1125/; n; s/>24</>25</}' infile
That is not reporting any error if the IP is changed but the sub-net is not. Which seems to be what you want from your description.
This is exactly what I was looking for. Is n; the match for newline in this command?
– Jay
yesterday
Not exactly,n
tells sed to read the next line from the file, then this line is matched. The end effect is that a newline must exist for this to match.
– Isaac
yesterday
add a comment |
up vote
0
down vote
up vote
0
down vote
Assuming that you want to change the IP on one line and the sub-net on the next line:
sed -E '/(192.168.1.)1/{s//1125/; n; s/>24</>25</}' infile
That is not reporting any error if the IP is changed but the sub-net is not. Which seems to be what you want from your description.
Assuming that you want to change the IP on one line and the sub-net on the next line:
sed -E '/(192.168.1.)1/{s//1125/; n; s/>24</>25</}' infile
That is not reporting any error if the IP is changed but the sub-net is not. Which seems to be what you want from your description.
answered 2 days ago
Isaac
10.7k11447
10.7k11447
This is exactly what I was looking for. Is n; the match for newline in this command?
– Jay
yesterday
Not exactly,n
tells sed to read the next line from the file, then this line is matched. The end effect is that a newline must exist for this to match.
– Isaac
yesterday
add a comment |
This is exactly what I was looking for. Is n; the match for newline in this command?
– Jay
yesterday
Not exactly,n
tells sed to read the next line from the file, then this line is matched. The end effect is that a newline must exist for this to match.
– Isaac
yesterday
This is exactly what I was looking for. Is n; the match for newline in this command?
– Jay
yesterday
This is exactly what I was looking for. Is n; the match for newline in this command?
– Jay
yesterday
Not exactly,
n
tells sed to read the next line from the file, then this line is matched. The end effect is that a newline must exist for this to match.– Isaac
yesterday
Not exactly,
n
tells sed to read the next line from the file, then this line is matched. The end effect is that a newline must exist for this to match.– Isaac
yesterday
add a comment |
Jay is a new contributor. Be nice, and check out our Code of Conduct.
Jay is a new contributor. Be nice, and check out our Code of Conduct.
Jay is a new contributor. Be nice, and check out our Code of Conduct.
Jay is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f486225%2fsed-awk-string-replacement-with-newline-and-tabs%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown