我需要构建一个脚本,将逗号分隔的值添加到文件中的特定行中。
假设我有一个包含内容的文件:
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
printf '%s\n' '/^DL1 :/ s/$/,[email protected]/' w q | ed -s input
上面打印了三个换行符分隔的命令ed
:
- 在以 text 开头的行中
DL1 :
,搜索并将行尾标记 ($
) 替换为,[email protected]
w
将文件写入磁盘q
伊特编辑
这具有添加到行尾的最终效果。,[email protected]
DL1 :