Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash sed在变量中的模式字符串下方粘贴_Bash_Variables_Design Patterns_Sed_Matching - Fatal编程技术网

Bash sed在变量中的模式字符串下方粘贴

Bash sed在变量中的模式字符串下方粘贴,bash,variables,design-patterns,sed,matching,Bash,Variables,Design Patterns,Sed,Matching,我正在寻找一种解决方案,将变量粘贴到匹配模式下 我有一半的解决方案,但无法完成我的脚本。。。 我使用这个脚本的目的是将变量“OSI”自动粘贴到正确月份的下方 /var/etc/osi.conf ###Jan### ###Feb### ###Mar### ###Apr### ###May### ###Jun### ###Jul### ###Aug### ###Sep### ###Oct### ###Nov###

我正在寻找一种解决方案,将变量粘贴到匹配模式下 我有一半的解决方案,但无法完成我的脚本。。。 我使用这个脚本的目的是将变量“OSI”自动粘贴到正确月份的下方

/var/etc/osi.conf
    ###Jan###
    ###Feb###
    ###Mar###
    ###Apr###
    ###May###
    ###Jun###
    ###Jul###
    ###Aug###
    ###Sep###
    ###Oct###
    ###Nov###
    ###Dec###
脚本:

    #!/bin/bash +x
    DATE=$(date | awk '{print $2}')
    DATE2=$(date +%Y-%m-%d -d "3 year")
    read -r -p "USERNAME: " USERNAME
    read -r -p "PASSWORD: " PASSWORD


    OSI="
    "$USERNAME"
    "$PASSWORD"
    "$DATE2"
    Fail 1
    eth0"

    sed -i 's/\#\#\#"$(date | awk '{print $2}')"\#\#\#/$OSI/g' /var/etc/osi.conf
///###编辑###

下面您可以找到结果。因为创建月份是三月和三月。因此,创建的用户必须低于####Mar###

var/etc/osi.conf

###Jan###
###Feb###
###Mar###
"$USERNAME"
"$PASSWORD"
"$DATE2"
Fail 1
eth0"
###Apr###
###May###
###Jun###
###Jul###
###Aug###
###Sep###
###Oct###
###Nov###
###Dec###

我进行了修改,因此我不必输入一些名称,不必在/etc中乱来,不存在区域设置和日期问题,并保持osi.conf不变以进行测试:

DATE=$(LC_ALL=C date | awk '{print $2}')
DATE2=$(LC_ALL=C date +%Y-%m-%d -d "3 year")
USERNAME="Hein"
PASSWORD="53cr3t"

echo -e "$USERNAME\n$PASSWORD\n$DATE2\nFail 1\neth0" > tmp.txt

sed "/$DATE/rtmp.txt" osi.conf
结果:

###Jan###
###Feb###
###Mar###
Hein
53cr3t
2021-03-13
Fail 1
eth0
###Apr###
###May###
###Jun###
###Jul###
###Aug###
###Sep###
###Oct###
###Nov###
###Dec###
如果需要在某些值周围加引号,请尝试屏蔽或读取引用


这里的关键点是sed(Gnu-sed)读取文件并按特定模式或行号输入的能力。

显示所需的输出。这听起来像是一个错误。你能给我们介绍一下你真正想要达到的目标吗?我的目标是自动化一个过程。一个人将输入凭证(用户名和密码),脚本将自动将用户名和密码粘贴到文件var/etc/osi.conf的正确月份下方。正确的月份是从用户创建凭据的月份。机密情报办公室?谢谢,这对我很有帮助。但是如果我输入第二个用户名,脚本将覆盖osi.conf中的第一个用户。我怎样才能避免呢?我希望所有用户都被记录下来,以使更改永久化,您已经在脚本中使用-I调用了sed。如果我在脚本中这样做,我可以添加多组行,而不会覆盖某些内容。