Linux 仅当行/文本不';不存在

Linux 仅当行/文本不';不存在,linux,bash,sed,terminal,Linux,Bash,Sed,Terminal,我有下面的脚本,它将在搜索目录下的文件夹名称时追加文件awslogs.conf,但如果我重新执行此脚本,它将再次追加。我怎样才能避免这样做 for NAME in $(ls -1p /home/ec2-user/src/ |grep -v "^_" | grep -v "/$" |cut -d. -f1); do sudo tee -a /etc/awslogs/awslogs.conf << END [$NAME] datetime_format = %b %d %H:%M:%S

我有下面的脚本,它将在搜索目录下的文件夹名称时追加文件
awslogs.conf
,但如果我重新执行此脚本,它将再次追加。我怎样才能避免这样做

for NAME in $(ls -1p /home/ec2-user/src/ |grep -v "^_" | grep -v "/$" |cut -d. -f1);
do
sudo tee -a /etc/awslogs/awslogs.conf << END
[$NAME]
datetime_format = %b %d %H:%M:%S
file = /var/log/airflow/$NAME/*/*/*.log
buffer_duration = 5000
log_stream_name = $NAME
initial_position = start_of_file
log_group_name = CLOUDWATCH_LOGS

END
done
sudo service awslogsd start
sudo systemctl enable awslogsd
以美元表示名称(ls-1p/home/ec2 user/src/|grep-v“^ | grep-v”/$”| cut-d.-f1);
做

sudo tee-a/etc/awslogs/awslogs.conf默认情况下,
tee
命令替换文件的内容
-a
替代要追加的。如果要替换内容,只需从命令中删除
-a

如果您只想在文件尚未包含内容的情况下追加内容,则这是一个完全不同的命题。例如,您可以将内容作为多行字符串拉出,并使用GNU
grep
检查整个内容:

contents="[$NAME]
datetime_format …"
if ! grep --fixed-strings --null --quiet "$contents" /etc/awslogs/awslogs.conf
then
    tee -a …

你可以从备份中创建一个初始文件,然后在每次运行时填充它。如果这还不是您所需要的全部,那么您必须在问题中添加更多的信息,告诉我们您正在尝试做什么,并使用简洁、可测试的示例输入和预期输出。