正则表达式可以通过使用该行中的其他单词转到该行来编辑特定行中的特定单词

正则表达式可以通过使用该行中的其他单词转到该行来编辑特定行中的特定单词

考虑以下文件:

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是可选的以获得良好的输出。

相关内容