sed - 用列表中的 sed 替换子目录中的文件条目
问题描述
我想替换一大堆文档中的某一行(#6),如下所示:
N Metal1 Metal2 Metal3 Metal4
其中金属需要用排列列表中的化学符号替换:
CrHfMoNb CrHfMoTa CrHfMoTi CrHfMoV CrHfMoW CrHfMoZr CrHfNbTa CrHfNbTi CrHfNbV CrHfNbW CrHfNbZr CrHfTaTi CrHfTaV CrHfTaW CrHfTaZr CrHfTiV CrHfTiW CrHfTiZr CrHfVW CrHfVZr CrHfWZr CrMoNbTa CrMoNbTi CrMoNbV CrMoNbW CrMoNbZr CrMoTaTi CrMoTaV CrMoTaW CrMoTaZr CrMoTiV CrMoTiW CrMoTiZr CrMoVW CrMoVZr CrMoWZr CrNbTaTi CrNbTaV CrNbTaW CrNbTaZr CrNbTiV CrNbTiW CrNbTiZr CrNbVW CrNbVZr CrNbWZr CrTaTiV CrTaTiW CrTaTiZr CrTaVW CrTaVZr CrTaWZr CrTiVW CrTiVZr CrTiWZr CrVWZr HfMoNbTa HfMoNbTi HfMoNbV HfMoNbW HfMoNbZr HfMoTaTi HfMoTaV HfMoTaW HfMoTaZr HfMoTiV HfMoTiW HfMoTiZr HfMoVW HfMoVZr HfMoWZr HfNbTaTi HfNbTaV HfNbTaW HfNbTaZr HfNbTiV HfNbTiW HfNbTiZr HfNbVW HfNbVZr HfNbWZr HfTaTiV HfTaTiW HfTaTiZr HfTaVW HfTaVZr HfTaWZr HfTiVW HfTiVZr HfTiWZr HfVWZr MoNbTaTi MoNbTaV MoNbTaW MoNbTaZr MoNbTiV MoNbTiW MoNbTiZr MoNbVW MoNbVZr MoNbWZr MoTaTiV MoTaTiW MoTaTiZrMoTaVW MoTaVZr MoTaWZr MoTiVW MoTiVZr MoTiWZr MoVWZr NbTaTiV NbTaTiW NbTaTiZr NbTaVW NbTaVZr NbTaWZr NbTiVW NbTiVZr NbTiWZr NbVWZr TaTiVW TaTiVZr TaTiWZr TaVWZr TiVWZr
让它看起来像这样:
N Cr Hf Mo Nb
我可以使用 sed 命令轻松地做到这一点:
sed -i '6s/Metal1 Metal2 Metal3 Metal4/Cr Hf Mo Nb/' filename`
问题是我需要为所有 126 种组合自动执行此操作,其中每个文件都位于每个组合的自己的子目录中,并且必须根据自己的元素进行相应调整。该文件始终具有相同的名称,并且在此更改之前完全相同。
化学符号必须按字母顺序列出,并且每个之间必须有一个空格,否则代码将不起作用。我认为这很困难,因为除了 V 之外,所有使用的元素的符号中都有两个字母。有没有一种有效的方法来做到这一点?
解决方案
处理两字符 (Zr) 一字符 (W) 问题很容易。每个大写字母都标志着一个新元素的开始。
cd dir/
for dir in *N; do
split="$(sed 's/N$//;s/[A-Z]/ &/g' <<< "$dir")"
sed -i "s/N Metal1 Metal2 Metal3 Metal4/N $split/" "$dir/file"
done
请注意,它$split
以空格开头,因此替换字符串就像在和N Cr Hf Mo Nb
之间有两个空格一样- 就像你想要的那样。N
Cr
推荐阅读
- java - Java 中的 Rest 服务从 Tomcat 服务器运行,但不在 Eclipse 内部
- node.js - Nodejs api 不接受 POST 方法,错误 405
- javascript - 当我尝试测试我的重试 util 函数时,jest.advanceTimersByTime 不起作用
- java - 我想在 Flux 中动态添加对象
- email - Sendgrid 电子邮件模板深色模式
- c - 如何跳过 n 的第二个输入
- json - 从计数器附加 JSON
- php - 邮件表单(PHP、AJAX)
- javascript - 如何让我的记事本 chrome 扩展在关闭时不会丢失用户的笔记?
- discord.js - 在 discord.js v12 中为提到的用户添加角色