在 bash 中将文本行替换为其他文本行

在 bash 中将文本行替换为其他文本行

我想用另一个文件更改文件中的文本行,例如:我拥有的文本

导出 GEOFIL='/afs/in2p3.fr/home/throng/antares/DETECTOR/r12_c00_s01.det 1 1'

我想用新的替换它

导出 GEOFIL='/pbs/throng/antares/DETECTOR/r12_c00_s01.det 1 1'

应对当前目录中的所有文件执行此操作

答案1

使用sed命令:

sed -i -e 's#/afs/in2p3.fr/home/#/pbs/#' the_filename

笔记:

  • -i选项用于更改名为输出的文件的内容,the_filename创建一个新文件。
  • #在 seds命令中使用字符,因为您的文本包含/字符

要对当前目录的所有文件执行它:

find . -maxdepth 1 -type f -exec sed -i -e 's#/afs/in2p3.fr/home/#/pbs/#' {} \;

笔记:

  • .: 在当前目录下工作
  • -type f:仅适用于标准文件
  • -maxdepth 1:仅在当前目录(深度 = 1)中工作,不适用于子目录
  • {}替换为find命令找到的文件名
  • \;-exec是选项的结尾

相关内容