使用bash删除两个标签之间的所有内容

时间:2019-07-28 19:27:33

标签: bash sh

我正在尝试为脚本创建卸载程序。问题是在同一个文件中,我有其他命令执行的多个命令,因此我只需要获取该脚本的一部分即可。我用标签划分了那部分

#!/bin/bash

echo "other code"
# Other code

#test
tempCommandFile=$(mktemp)
function btmonTemp() {
    rm -rf $tempCommandFile
}
echo "Uninstall process"
sudo launchctl unload -w /Library/LaunchDaemons/com.app.plist 
sudo rm -rf /usr/local/paveljame/app 
sudo rm -rf /Library/LaunchDaemons/com.app.plist 
sudo rm -rf /var/log/script/app 
echo "Finished" 
echo '#!/bin/bash
tempFinisedFile=$(mktemp)
awk "/#test/{p=1;print}/#endtest/{p=0}!p" /usr/local/bin/script > $tempFinisedFile
cat $tempFinisedFile > /usr/local/bin/script
rm -rf $tempFinisedFile 
rm -rf $tempCommandFile
' > $tempCommandFile
#endtest
sh $tempCommandFile
trap btmonTemp EXIT

运行脚本后,我得到了:

#!/bin/bash
echo "other code"
# Other code

#test
awk "/#test/{p=1;print}/#endtest/{p=0}!p" /usr/local/bin/script > $tempFinisedFile
awk "/#test/{p=1;print}/#endtest/{p=0}!p" /usr/local/bin/script > $tempFinisedFile
cat $tempFinisedFile > /usr/local/bin/script
rm -rf $tempFinisedFile 
rm -rf $tempCommandFile
' > $tempCommandFile
#endtest
sh $tempCommandFile
trap btmonTemp EXIT

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您可以使用来测试代码

awk "/#test/{p=1;print}/#endtest/{p=0}!p" /usr/local/bin/script

输出两次显示awk命令。为什么?
当找到#test的行中的某处时,它将打印一行。
在与awk的行中找到匹配项。
修复:添加^

awk "/^#test/{p=1;print}/^#endtest/{p=0}!p" /usr/local/bin/script
相关问题