我的文件包含以下条目:
cat /tmp/test.yaml
---
10.8.8.26:
/tmp/win5835113081224811756.jar:
hash: e6df90d38fa86f0e289f73d79cd2cfd2a29954eb
/tmp/win03745991442278706.jar:
hash: e6df90d38fa86f0e289f73d79cd2cfd2a29954eb
10.9.9.26:
/tmp/conf/extra/httpd-ssl.conf:
hash: 1746f03d57491b27158b0d3a48fca8b5fa85c0c2
/tmp/conf/httpd.conf:
hash: 1746f03d57491b27158b0d3a48fca8b5fa85c0c2
等等...
我希望从 test.yaml 中删除特定 IP(例如 10.8.8.26)及其文件详细信息
下面的正则表达式有助于获取我希望从文件中删除的详细信息,因此我将其存储在名为 check 的变量中:
export check=`grep -Pzo '[^#](^10.8.8.26:)(.|\n)*^(?!( |\n))' /tmp/test.yaml`
echo $check
10.8.8.26: /tmp/win5835113081224811756.jar: hash: e6df90d38fa86f0e289f73d79cd2cfd2a29954eb /tmp/win03745991442278706.jar: hash: e6df90d38fa86f0e289f73d79cd2cfd2a29954eb
然后我想使用变量检查来从文件中删除抓取的条目。
我尝试了以下命令,但它们没有帮助。
grep -v "$check" /tmp/test.yaml
和
sed "/${check}/d" /tmp/test.yaml sed: -e expression #1, char 1:
unterminated address regex
您能建议我如何满足我的要求吗?
答案1
会走多远
awk -v"DEL=10.8.8.26" '/^[0-9]/ {LP = 1} $0 ~ "^" DEL {LP = 0} LP' file
我懂了?
尝试
awk -v"DEL=10.9.9.26" '/^[^ ]/ {LP = 1} $0 ~ "^" DEL {LP = 0} LP' file
“如果 IP 地址更改为主机名。” (来自你的评论)。将其包含在原来的问题中会有所帮助。