删除文件范围内的行

时间:2016-12-23 09:40:36

标签: linux shell unix

我的文本文件包含如下内容,我想删除特定位置的行。 例如从-displayName: "TIBCO_EMS_2"excludeTopics: []

我试过以下。

DP=TIBCO_EMS_2
sed "/- displayName: $DP/,/excludeTopics/d" config.yml

但仍然没有运气,是否有正确的命令可以使用而不是sed。

emsServers:

   - displayName: "TIBCO_EMS_1"
     host: "8988.auf.net"
     port: 7443
     protocol: "tcp"
     user: "admin"
     password: ""
     encryptedPassword: "xzID9SbHsQTMkoRSVTGu4g=="
     encryptionKey: "EncryptionKey"
     showTemp: false
     showSystem: false
     excludeQueues: [sample1 sample2]
     excludeTopics: []

   - displayName: "TIBCO_EMS_2"
     host: "8988.auf.net"
     port: 7333
     protocol: "tcp"
     user: "admin"
     password: ""
     encryptedPassword: "d4FqX7O6bZCDs2corcd2eA=="
     encryptionKey: "EncryptionKey"
     showTemp: false
     showSystem: false
     excludeQueues: [sample1 sample2]
     excludeTopics: []

2 个答案:

答案 0 :(得分:1)

您可以试试awk

awk -vRS= '!/displayName: "TIBCO_EMS_2"/{print}' filename

不改变原始格式,

awk -vRS= '!/displayName: "TIBCO_EMS_2"/{print}' ORS="\n\n" filename

如果要在变量中传递值,

DP='"TIBCO_EMS_2"'
awk -vVAR="$DP" -vRS= '{patt="displayName: "VAR} $0 !~ patt{print}' ORS="\n\n"

答案 1 :(得分:0)

你错过了引号。

DP=TIBCO_EMS_2 sed "/- displayName: \"$DP\"/,/excludeTopics/d" config.yml