$ cat temp.x
Preceding line
KDUMP_COMMANDLINE_APPEND="irqpoll nr_cpus=1 reset_devices cgroup_disable=memory mce=off"
Following line
$ cat test.sed
/KDUMP_COMMANDLINE_APPEND/ {
h # hold original line
s/.*/# &/ # Add comment
p # print commented line
g # retrieve original line
s/nr_cpus/maxcpus/ # change the text
}
$ sed -f test.sed temp.x
Preceding line
# KDUMP_COMMANDLINE_APPEND="irqpoll nr_cpus=1 reset_devices cgroup_disable=memory mce=off"
KDUMP_COMMANDLINE_APPEND="irqpoll maxcpus=1 reset_devices cgroup_disable=memory mce=off"
Following line
$ sed "/KDUMP_COMMANDLINE_APPEND/ {h; s/.*/# &/; p; g; s/nr_cpus/maxcpus/}" temp.x
Preceding line
# KDUMP_COMMANDLINE_APPEND="irqpoll nr_cpus=1 reset_devices cgroup_disable=memory mce=off"
KDUMP_COMMANDLINE_APPEND="irqpoll maxcpus=1 reset_devices cgroup_disable=memory mce=off"
Following line
Small changes! The cost of scanning for nr_cpus twice is offset by the simpler substitute -- 's/\(...\).../\1.../' is not so cheap:
/KDUMP_COMMANDLINE_APPEND.*nr_cpus/ {
h # hold original line
s/^/# / # Add comment
p # print commented line
g # retrieve original line
s/nr_cpus/maxcpus/ # change the text
}