更改多个文本文件中单个行号上的文本

And*_*rew 4 awk vi text-processing bash-script

假设我有十个 bash shell 脚本:script1.sh, script2.sh, ..., script10.sh. 最初,所有十个文件都是相同的。

现在,我想对每个脚本进行两​​个更改:

  1. 在每个文件中,我想更改一个特定的行(比如第 8 行)——也就是说,删除第 8 行中的任何内容并将其替换为我指定的“常量”字符串,例如"This is line 8." This is similar to this question,但他们想取代"AAA""BBB",而我想,以取代8号线(不管它是什么)"This is line 8."

  2. 在每个文件中,我想更改另一行(比如第 21 行)并将其替换为我指定的“变量”字符串。例如,在script1.sh我想将第 21 行更改为"XYZ"; 在script2.sh我想将第 21 行更改为"PQR"; 并且script3.sh我想将第 21 行更改为"ABC". 本质上,这只是对上面(1) 中函数的多次调用——除了我将在一个单独的文件中而不是在所有文件中进行更改,并且我指定了十个不同的字符串而不是一个。所以为了在这里获得(2),也许我会用不同的参数调用(1)十次不同的时间。

我感兴趣的是使用常用的Linux程序类似的解决方案bashviawkgawk,等。

Hau*_*ing 5

for file in f1 f2; do
  sed -i '8s/^.*$/foo/' "$file"
done
Run Code Online (Sandbox Code Playgroud)

  • 为什么不只是`sed -i '8s/^.*$/foo/' f1 f2`? (3认同)
  • 完美运行:`echo test1 > f1; echo test2 > f2; sed -i '1s/^.*$/foo/' f1 f2`。`cat f1 f2` 显示两者都更改为 `foo`。 (2认同)
  • 尝试使用 `-s`:“将文件视为单独的而不是单个连续的长流。” (2认同)