![正则表达式可以通过使用该行中的其他单词转到该行来编辑特定行中的特定单词](https://linux22.com/image/156406/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%E4%BD%BF%E7%94%A8%E8%AF%A5%E8%A1%8C%E4%B8%AD%E7%9A%84%E5%85%B6%E4%BB%96%E5%8D%95%E8%AF%8D%E8%BD%AC%E5%88%B0%E8%AF%A5%E8%A1%8C%E6%9D%A5%E7%BC%96%E8%BE%91%E7%89%B9%E5%AE%9A%E8%A1%8C%E4%B8%AD%E7%9A%84%E7%89%B9%E5%AE%9A%E5%8D%95%E8%AF%8D.png)
考虑以下文件:
Name Id department
some 13 IT
hey 12 IT
我真正想做的是从用户那里读取名称并编辑其特定的 ID 或部门。我正在尝试用来sed
执行此操作但是无法找到正确的正则表达式来IT
仅在嘿的行中进行替换
我在正则表达式领域相对较新,除了很少的基础知识之外,不知道太多
答案1
在 sed 中,使用正则表达式作为命令前缀只会编辑与该正则表达式匹配的行。
sed -r '/^hey\s/s/(\s)IT$/\1whatever/'
答案2
要按模式查找特定行sed
并将 foo 替换为 bar,请执行以下操作:
sed '/pattern/s/foo/bar/'
由于名称似乎是您案例中的第一列,您甚至可以将^
“行开头”的 - 标记添加到您的模式中。
答案3
您应该使用awk
而不是sed
用于您的任务。
如果文件用制表符分隔:
awk -F$'\t' '$1=="hey"{$3="HR"}{OFS=FS;print}' file
如果它是空格分隔的:
awk '$1=="hey"{$3="HR"}1' file | column -t
column -t
是可选的以获得良好的输出。