提问人:Yassine Boumajane 提问时间:9/21/2023 更新时间:9/22/2023 访问量:72
将带有特殊字符的字符串从文件复制到另一个文件的关键字 [closed] 之后
copy a string with special chars from a file, into another file after a keyword [closed]
问:
我有一个文件,其中包含一个带有特殊字符的随机字符串值,我需要复制该内容并将其粘贴到关键字“echo”之后的另一个文件中。
脚本如下:
#!/bin/bash
sudo systemctl stop zpa-connector
sudo touch /opt/zscaler/var/provision_key
sudo chmod 644 /opt/zscaler/var/provision_key
sudo echo | tee /opt/zscaler/var/provision_key
cat /opt/zscaler/var/provision_key
sudo systemctl start zpa-connector
预期结果示例:
#!/bin/bash
sudo systemctl stop zpa-connector
sudo touch /opt/zscaler/var/provision_key
sudo chmod 644 /opt/zscaler/var/provision_key
sudo echo 'azd516/*651az654daz[#lc,nzpmoa156' | tee /opt/zscaler/var/provision_key
cat /opt/zscaler/var/provision_key
sudo systemctl start zpa-connector
我怎样才能做到这一点?感谢您的帮助
附带问题:我不知道回声后粘贴的内容应该是双引号还是简单引号
答:
1赞
Paolo
9/21/2023
#1
用:sed
$ cat file
azd516/*651az654daz[#lc,nzpmoa156
$ cat script
#!/bin/bash
sudo systemctl stop zpa-connector
sudo touch /opt/zscaler/var/provision_key
sudo chmod 644 /opt/zscaler/var/provision_key
sudo echo | tee /opt/zscaler/var/provision_key
cat /opt/zscaler/var/provision_key
sudo systemctl start zpa-connector
$ v=$(< file)
$ sed -E "s|^(sudo echo)( \|.+)$|\1 '$v'\2|" script
#!/bin/bash
sudo systemctl stop zpa-connector
sudo touch /opt/zscaler/var/provision_key
sudo chmod 644 /opt/zscaler/var/provision_key
sudo echo 'azd516/*651az654daz[#lc,nzpmoa156' | tee /opt/zscaler/var/provision_key
cat /opt/zscaler/var/provision_key
sudo systemctl start zpa-connector
此命令将感兴趣的现有字符串捕获到两组中,并将变量的内容(包含来自其他文件中的字符串)放在它们之间。它用作分隔符,因为默认的分隔符 () 存在于您的字符串中。sed
v
|
/
但是,如果您知道变量可能会更改并且可能包含未知字符,则最好使用:awk
$ v=$(< file)
$ export v
$ awk 'BEGIN{FS="|";OFS=" |"}{if ($0 == "sudo echo | tee /opt/zscaler/var/provision_key") {print $1 "\047" ENVIRON["v"] "\047" ,$2} else {print $0}}' script
#!/bin/bash
sudo systemctl stop zpa-connector
sudo touch /opt/zscaler/var/provision_key
sudo chmod 644 /opt/zscaler/var/provision_key
sudo echo 'azd516/*651az654daz[#lc,nzpmoa156' | tee /opt/zscaler/var/provision_key
cat /opt/zscaler/var/provision_key
sudo systemctl start zpa-connector
评论
0赞
Yassine Boumajane
9/22/2023
感谢您的回复,字符串内容基本上是随机的,它可以包含任何 ASCI 字符。至于 AWK,如果您有这样的解决方案,我不反对使用它 - 我将不胜感激,再次感谢
0赞
Paolo
9/22/2023
@YassineBoumajane 我也添加了一个解决方案awk
0赞
Ed Morton
9/22/2023
别客气。FWIW 如果您与之前的同一行,则不需要 ,即 都在一行上。v="$v"
awk
export v
v="$v" awk ...
评论