Multiline string replace inside markup tag
I am trying to modify an httpd.conf
file, allowing override in the /var/www/html
directory. For simplicity's sake, let's say it looks like this:
<Directory "/var/www/html">
# Comment
AllowOverride none
# Comment
</Directory>
Trying to replace AllowOverride none
with AllowOverride All
.
I tried something like this:
sed -i 's/(Directory "/var/www/html">.*?)AllowOverride none(.*?</Directory>)/1AllowOverride all2/' httpd.conf
It doesn't look like it catches multiple lines, so I tried some other things, such as RegEx modifiers and this: https://www.gnu.org/software/sed/manual/html_node/Text-search-across-multiple-lines.html
but was unable to match the desired string.
How would one go about doing this? Solutions outside of sed are welcome as well.
sed apache-httpd replace
add a comment |
I am trying to modify an httpd.conf
file, allowing override in the /var/www/html
directory. For simplicity's sake, let's say it looks like this:
<Directory "/var/www/html">
# Comment
AllowOverride none
# Comment
</Directory>
Trying to replace AllowOverride none
with AllowOverride All
.
I tried something like this:
sed -i 's/(Directory "/var/www/html">.*?)AllowOverride none(.*?</Directory>)/1AllowOverride all2/' httpd.conf
It doesn't look like it catches multiple lines, so I tried some other things, such as RegEx modifiers and this: https://www.gnu.org/software/sed/manual/html_node/Text-search-across-multiple-lines.html
but was unable to match the desired string.
How would one go about doing this? Solutions outside of sed are welcome as well.
sed apache-httpd replace
add a comment |
I am trying to modify an httpd.conf
file, allowing override in the /var/www/html
directory. For simplicity's sake, let's say it looks like this:
<Directory "/var/www/html">
# Comment
AllowOverride none
# Comment
</Directory>
Trying to replace AllowOverride none
with AllowOverride All
.
I tried something like this:
sed -i 's/(Directory "/var/www/html">.*?)AllowOverride none(.*?</Directory>)/1AllowOverride all2/' httpd.conf
It doesn't look like it catches multiple lines, so I tried some other things, such as RegEx modifiers and this: https://www.gnu.org/software/sed/manual/html_node/Text-search-across-multiple-lines.html
but was unable to match the desired string.
How would one go about doing this? Solutions outside of sed are welcome as well.
sed apache-httpd replace
I am trying to modify an httpd.conf
file, allowing override in the /var/www/html
directory. For simplicity's sake, let's say it looks like this:
<Directory "/var/www/html">
# Comment
AllowOverride none
# Comment
</Directory>
Trying to replace AllowOverride none
with AllowOverride All
.
I tried something like this:
sed -i 's/(Directory "/var/www/html">.*?)AllowOverride none(.*?</Directory>)/1AllowOverride all2/' httpd.conf
It doesn't look like it catches multiple lines, so I tried some other things, such as RegEx modifiers and this: https://www.gnu.org/software/sed/manual/html_node/Text-search-across-multiple-lines.html
but was unable to match the desired string.
How would one go about doing this? Solutions outside of sed are welcome as well.
sed apache-httpd replace
sed apache-httpd replace
asked Dec 27 '18 at 15:41
YnhockeyYnhockey
1033
1033
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
I'm going to assume that what you want is to replace ONLY the AllowOverride none
specifically in the <Directory "/var/www/html">
block and not elsewhere. We can do that.
Short version:
sed -i '/^<Directory "/var/www/html">/,/^</Directory>/ {
s/AllowOverride none/AllowOverride all/;
}' httpd.conf
This says to only apply the substitute command between the specified lines.
Remember to back up your file first, and diff
them after to confirm you got what you wanted. :)
add a comment |
sed
, being a *nix text tool, is line based. To work upon several lines, you need to take certain measures. Why doesn't
sed 's/AllowOverride none/AllowOverride all/' file
satisfy your needs?
EDIT: or, if you only want to change the string in that "directory" paragraph,
sed '/<Directory "/var/www/html">/,/</Directory>/ s/AllowOverride none/AllowOverride all/' file
EDIT: With three small adaptions, you make your own script work correctly:
sed 's/(Directory "/var/www/html">.*?)AllowOverride none(.*?</Directory>)/1AllowOverride all2/' file
sed -z 's/(Directory "/var/www/html">.*)AllowOverride none(.*</Directory>)/1AllowOverride all2/' file
^ ^ ^
-z
(--null-data, separate lines by NUL characters; cf. man sed
) makes sed
ignore line feed chars, i.e. loads the entire file. The two ?
indicated by the carets must go away. And, be aware that the "
don't need the escape (but it doesn't hurt).
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
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%2f491150%2fmultiline-string-replace-inside-markup-tag%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
I'm going to assume that what you want is to replace ONLY the AllowOverride none
specifically in the <Directory "/var/www/html">
block and not elsewhere. We can do that.
Short version:
sed -i '/^<Directory "/var/www/html">/,/^</Directory>/ {
s/AllowOverride none/AllowOverride all/;
}' httpd.conf
This says to only apply the substitute command between the specified lines.
Remember to back up your file first, and diff
them after to confirm you got what you wanted. :)
add a comment |
I'm going to assume that what you want is to replace ONLY the AllowOverride none
specifically in the <Directory "/var/www/html">
block and not elsewhere. We can do that.
Short version:
sed -i '/^<Directory "/var/www/html">/,/^</Directory>/ {
s/AllowOverride none/AllowOverride all/;
}' httpd.conf
This says to only apply the substitute command between the specified lines.
Remember to back up your file first, and diff
them after to confirm you got what you wanted. :)
add a comment |
I'm going to assume that what you want is to replace ONLY the AllowOverride none
specifically in the <Directory "/var/www/html">
block and not elsewhere. We can do that.
Short version:
sed -i '/^<Directory "/var/www/html">/,/^</Directory>/ {
s/AllowOverride none/AllowOverride all/;
}' httpd.conf
This says to only apply the substitute command between the specified lines.
Remember to back up your file first, and diff
them after to confirm you got what you wanted. :)
I'm going to assume that what you want is to replace ONLY the AllowOverride none
specifically in the <Directory "/var/www/html">
block and not elsewhere. We can do that.
Short version:
sed -i '/^<Directory "/var/www/html">/,/^</Directory>/ {
s/AllowOverride none/AllowOverride all/;
}' httpd.conf
This says to only apply the substitute command between the specified lines.
Remember to back up your file first, and diff
them after to confirm you got what you wanted. :)
answered Dec 27 '18 at 18:32
Paul HodgesPaul Hodges
1913
1913
add a comment |
add a comment |
sed
, being a *nix text tool, is line based. To work upon several lines, you need to take certain measures. Why doesn't
sed 's/AllowOverride none/AllowOverride all/' file
satisfy your needs?
EDIT: or, if you only want to change the string in that "directory" paragraph,
sed '/<Directory "/var/www/html">/,/</Directory>/ s/AllowOverride none/AllowOverride all/' file
EDIT: With three small adaptions, you make your own script work correctly:
sed 's/(Directory "/var/www/html">.*?)AllowOverride none(.*?</Directory>)/1AllowOverride all2/' file
sed -z 's/(Directory "/var/www/html">.*)AllowOverride none(.*</Directory>)/1AllowOverride all2/' file
^ ^ ^
-z
(--null-data, separate lines by NUL characters; cf. man sed
) makes sed
ignore line feed chars, i.e. loads the entire file. The two ?
indicated by the carets must go away. And, be aware that the "
don't need the escape (but it doesn't hurt).
add a comment |
sed
, being a *nix text tool, is line based. To work upon several lines, you need to take certain measures. Why doesn't
sed 's/AllowOverride none/AllowOverride all/' file
satisfy your needs?
EDIT: or, if you only want to change the string in that "directory" paragraph,
sed '/<Directory "/var/www/html">/,/</Directory>/ s/AllowOverride none/AllowOverride all/' file
EDIT: With three small adaptions, you make your own script work correctly:
sed 's/(Directory "/var/www/html">.*?)AllowOverride none(.*?</Directory>)/1AllowOverride all2/' file
sed -z 's/(Directory "/var/www/html">.*)AllowOverride none(.*</Directory>)/1AllowOverride all2/' file
^ ^ ^
-z
(--null-data, separate lines by NUL characters; cf. man sed
) makes sed
ignore line feed chars, i.e. loads the entire file. The two ?
indicated by the carets must go away. And, be aware that the "
don't need the escape (but it doesn't hurt).
add a comment |
sed
, being a *nix text tool, is line based. To work upon several lines, you need to take certain measures. Why doesn't
sed 's/AllowOverride none/AllowOverride all/' file
satisfy your needs?
EDIT: or, if you only want to change the string in that "directory" paragraph,
sed '/<Directory "/var/www/html">/,/</Directory>/ s/AllowOverride none/AllowOverride all/' file
EDIT: With three small adaptions, you make your own script work correctly:
sed 's/(Directory "/var/www/html">.*?)AllowOverride none(.*?</Directory>)/1AllowOverride all2/' file
sed -z 's/(Directory "/var/www/html">.*)AllowOverride none(.*</Directory>)/1AllowOverride all2/' file
^ ^ ^
-z
(--null-data, separate lines by NUL characters; cf. man sed
) makes sed
ignore line feed chars, i.e. loads the entire file. The two ?
indicated by the carets must go away. And, be aware that the "
don't need the escape (but it doesn't hurt).
sed
, being a *nix text tool, is line based. To work upon several lines, you need to take certain measures. Why doesn't
sed 's/AllowOverride none/AllowOverride all/' file
satisfy your needs?
EDIT: or, if you only want to change the string in that "directory" paragraph,
sed '/<Directory "/var/www/html">/,/</Directory>/ s/AllowOverride none/AllowOverride all/' file
EDIT: With three small adaptions, you make your own script work correctly:
sed 's/(Directory "/var/www/html">.*?)AllowOverride none(.*?</Directory>)/1AllowOverride all2/' file
sed -z 's/(Directory "/var/www/html">.*)AllowOverride none(.*</Directory>)/1AllowOverride all2/' file
^ ^ ^
-z
(--null-data, separate lines by NUL characters; cf. man sed
) makes sed
ignore line feed chars, i.e. loads the entire file. The two ?
indicated by the carets must go away. And, be aware that the "
don't need the escape (but it doesn't hurt).
edited Dec 27 '18 at 22:07
answered Dec 27 '18 at 17:26
RudiCRudiC
4,2041312
4,2041312
add a comment |
add a comment |
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%2f491150%2fmultiline-string-replace-inside-markup-tag%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