如何从文件中删除包含精确模式的引号字符串

问题描述 投票:0回答:2

我在 file.txt 中有以下内容:

"prom-oa-eui-slrcloud-plt4.test1.devops.oa.iqvia.com","auth-oa-eui-slrcloud-plt4.test1.devops.oa.iqvia.com","dex-oa-eui-slrcloud-plt4.test1.devops.oa.iqvia.com","dashboard-oa-eui-slrcloud-plt4.test1.devops.oa.iqvia.com","argocd-oa-eui-slrcloud-plt4.test1.devops.oa.iqvia.com","alert-oa-eui-slrcloud-plt4.test1.devops.oa.iqvia.com","tntcloudid.test1.devops.oa.iqvia.com","tntcloudid-df.test1.devops.oa.iqvia.com","tntcloudid-superset.test1.devops.oa.iqvia.com","tntcloudid-orchflow.test1.devops.oa.iqvia.com","tntcloudid-dmgr.test1.devops.oa.iqvia.com","tntcloudid-ps.test1.devops.oa.iqvia.com","vanity-tntcloud.test1.devops.oa.iqvia.com","vanity-tntcloud-df.test1.devops.oa.iqvia.com","vanity-tntcloud-superset.test1.devops.oa.iqvia.com","vanity-tntcloud-orchflow.test1.devops.oa.iqvia.com","vanity-tntcloud-dmgr.test1.devops.oa.iqvia.com","vanity-tntcloud-ps.test1.devops.oa.iqvia.com","tntcloud1id.test1.devops.oa.iqvia.com","tntcloud1id-df.test1.devops.oa.iqvia.com","tntcloud1id-superset.test1.devops.oa.iqvia.com","tntcloud1id-orchflow.test1.devops.oa.iqvia.com","tntcloud1id-dmgr.test1.devops.oa.iqvia.com","tntcloud1id-ps.test1.devops.oa.iqvia.com","vanity-tntcloud1.test1.devops.oa.iqvia.com","vanity-tntcloud1-df.test1.devops.oa.iqvia.com","vanity-tntcloud1-superset.test1.devops.oa.iqvia.com","vanity-tntcloud1-orchflow.test1.devops.oa.iqvia.com","vanity-tntcloud1-dmgr.test1.devops.oa.iqvia.com","vanity-tntcloud1-ps.test1.devops.oa.iqvia.com","tntcloud2id.test1.devops.oa.iqvia.com","tntcloud2id-df.test1.devops.oa.iqvia.com","tntcloud2id-superset.test1.devops.oa.iqvia.com","tntcloud2id-orchflow.test1.devops.oa.iqvia.com","tntcloud2id-dmgr.test1.devops.oa.iqvia.com","tntcloud2id-ps.test1.devops.oa.iqvia.com","vanity-tntcloud2.test1.devops.oa.iqvia.com","vanity-tntcloud2-df.test1.devops.oa.iqvia.com","vanity-tntcloud2-superset.test1.devops.oa.iqvia.com","vanity-tntcloud2-orchflow.test1.devops.oa.iqvia.com","vanity-tntcloud2-dmgr.test1.devops.oa.iqvia.com","vanity-tntcloud2-ps.test1.devops.oa.iqvia.com"

我想删除所有出现“tntcloudid”和“vanity-tntcloud”的字符串,前提是我在条目中有这些模式。

我试过下面的代码:

sed -e "s/tntcloudid//g; s/vanity-tntcloud//g" file.txt

但它只删除了“tntcloudid”和“vanity-tntcloud”,而不是行中剩余的字符串,如“.test1.devops.oa.iqvia.com”,“-df.test1.devops.oa.iqvia。 com”等...

因为我有其他字符串,如 vanity-tntcloud1、vanity-tntcloud2 等......这些字符串受到影响,我不想删除字符串的那些部分,但只删除我的模式(仅限“tntcloudid”和“vanity-tntcloud”)

我尝试了下面的代码,但结果是一样的:

sed -e "s/\<tntcloudid\>//g; s/\<vanity-tntcloud\>//g"

我怎样才能只删除与“tntcloudid”和“vanity-tntcloud”模式匹配的行而不影响内容为“vanity-tntcloud1”的其他字符串...“vanity-tntcloud2”等...?

bash sed grep
2个回答
2
投票

使用 GNU sed:

TENANTID=tntcloudid
VANITY=vanity-tntcloud

sed -E 's/"[^"]*\<'"$TENANTID"'\>[^"]*"(,|$)//g; s/"[^"]*\<'"$VANITY"'\>[^"]*"(,|$)//g' file.txt

0
投票

要使用 sed、grep 或 bash 根据模式从文件中删除行,您可以使用多种方法。以下是使用这些工具中的每一个的示例:

使用 sed:

sed -i '/pattern/d' file.txt`

此命令将删除 file.txt 中包含指定模式的任何行。 -i 标志就地编辑文件。

使用带有 -v(反转匹配)选项的 grep 并在重命名之前将输出重定向到临时文件:

grep -v 'pattern' file.txt > temp.txt && mv temp.txt file.txt

此命令将创建一个临时文件 (temp.txt),不包括包含该模式的行。然后,它用修改后的文件替换原始文件。

使用 bash 脚本:

#!/bin/bash
pattern="your_pattern"
output_file="output.txt"

while IFS= read -r line; do
  if [[ ! $line =~ $pattern ]]; then
    echo "$line" >> "$output_file"
  fi
done < "file.txt"

在这个bash脚本中,你需要设置pattern和output_file变量。该脚本读取输入文件 (file.txt) 的每一行并检查它是否与模式不匹配。如果不匹配,它会将行附加到 output_file。

请记住根据您要使用的特定模式调整模式变量。这些示例展示了实现相同结果的不同方法。选择最适合您的要求和系统上可用的工具。

© www.soinside.com 2019 - 2024. All rights reserved.