我在 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”等...?
要使用 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。
请记住根据您要使用的特定模式调整模式变量。这些示例展示了实现相同结果的不同方法。选择最适合您的要求和系统上可用的工具。
删除包含特定字符串的行
grep
是一个更好的工具,例如如果substrings.txt
包含:
tntvcloudid
vanity-tntcloud
然后:
grep -vf substrings.txt infile.txt
将从
substrings.txt
. 中删除包含字符串的行