Suppose that I have ten bash shell scripts: script1.sh
, script2.sh
, ..., script10.sh
. Initially, all ten files are identical.
Now, I would like to make two changes in each script:
In each file, I would like to change a particular line (say line 8) -- that is, deleting whatever is on line 8 and replacing it with a "constant" string that I specify, such as
"This is line 8."
This is similar to this question, but there they wanted to replace"AAA"
with"BBB"
, whereas I would like to replace line 8 (whatever it is) with"This is line 8."
.In each file, I would like to change another particular line (say line 21) and replace it with a "variable" string that I specify. For example, in
script1.sh
I want to change line 21 to"XYZ"
; inscript2.sh
I want to change line 21 to"PQR"
; and inscript3.sh
I want to change line 21 to"ABC"
. Essentially this is just many calls to the function in (1) above -- except that I would be making the change in one individual file rather than in all files, and that I am specifying ten different strings rather than just one. So to obtain (2) here, perhaps I would just call (1) ten different times with different parameters.
I am interested in solutions that use commonly available Linux programs like bash
, vi
, awk
, gawk
, etc.
sed -i '8s/^.*$/foo/' f1 f2
? – l0b0 Jun 21 '13 at 21:51echo test1 > f1; echo test2 > f2; sed -i '1s/^.*$/foo/' f1 f2
.cat f1 f2
shows that both were changed tofoo
. – l0b0 Jun 21 '13 at 22:05-i
. And in that case just one line was changed. Doesn't make sense to me. A bug (GNU sed-Version 4.2.1)? – Hauke Laging Jun 21 '13 at 22:10-s
: "consider files as separate rather than as a single continuous long stream." – l0b0 Jun 22 '13 at 08:28