将数据添加到文件中的特定行

将数据添加到文件中的特定行

我需要构建一个脚本,将逗号分隔的值添加到文件中的特定行中。

假设我有一个包含内容的文件:

DL1 : [email protected],[email protected],[email protected]
DL2 : [email protected],[email protected],[email protected]

我需要添加[email protected]DL1 :

答案1

要匹配以 ( ) 开头的行DL1 :并添加到它们的末尾 ( ):,[email protected]$

$ sed '/^DL1 :/ s/$/,[email protected]/' file
DL1 : [email protected],[email protected],[email protected],[email protected]
DL2 : [email protected],[email protected],[email protected]

根据您的要求和您的版本,sed您可以添加-i以进行就地转换。

答案2

只需使用以下方法即可满足您的要求awk

awk '$1 == "DL1" {$0 = $0 ",[email protected]"} 1' file

使用 GNU awk,您可以使用该-i选项进行就地编辑,否则您将需要使用输出创建一个临时文件。


如果您希望将此功能添加到 shell 脚本中,您可以使用 awk 变量传递搜索和输入。就像是:

#!/bin/sh

search=$1
addition=$2

awk -v s="$search" -v a="$addition" '$1 == s {$0 = $0 "," a} 1' file

答案3

对于标准 UNIX 编辑器 ed:

printf '%s\n' '/^DL1 :/ s/$/,[email protected]/' w q | ed -s input

上面打印了三个换行符分隔的命令ed

  1. 在以 text 开头的行中DL1 :,搜索并将行尾标记 ( $) 替换为,[email protected]
  2. w将文件写入磁盘
  3. q伊特编辑

这具有添加到行尾的最终效果。,[email protected]DL1 :

相关内容