我正在处理包含用户列表的属性文件:例如
[email protected],[email protected]
[email protected],[email protected]
[email protected]
[email protected]
[email protected]
现在,如果我只想删除[电子邮件受保护]仅来自 AdminList。我们如何在 Linux 上使用 sed 或 awk 来做到这一点?我是linux新手,请帮忙
编辑:我不想删除整个值部分。我只想删除特定的字符串。例如,如果我的文件如下所示:
[email protected],[email protected]
[email protected],[email protected]
[email protected]
[email protected],[email protected],[email protected],[email protected]
[email protected]
在这种情况下我只想摆脱[电子邮件受保护]来自管理列表
答案1
情况1:删除完整的“值”部分
假设您的文件仅包含“简单”key=value
语句,即“值”部分包含不 =
标志,您可以使用sed
如下:
sed '/^AdminList/s/=.*$/=/' propertyfile.txt
您的示例的输出如下所示:
[email protected],[email protected]
[email protected],[email protected]
[email protected]
AdminList=
[email protected]
这里的想法是用一个简单的 替换(s
命令中的 )由 组成的表达式=
,后跟任意数量的字符(.*
部分)直到行尾(符号) ,但仅限于以 开头的行。$
=
AdminList
案例 2:从价值清单中扣除特定价值的消费税
如果您只想从逗号分隔的列表中删除一个特定值,我会推荐一种awk
基于 - 的方法:
awk '/^AdminList/ {sub(/[email protected],?/,""); print;next} {print}' propertyfile.txt
这将匹配以 开头的行AdminList
并替换 模式[email protected]
,可能尾随,
空字符串,打印修改后的行,并跳到下一行执行。对于所有其他行,它将简单地打印整行。
鉴于您的第二个示例输入,这会产生:
[email protected],[email protected]
[email protected],[email protected]
[email protected]
[email protected],[email protected],[email protected]
[email protected]
所选择的语法应该具有相当的可移植性;我已经用 GNU Awk 和 Mawk 对其进行了测试。
答案2
将数据保存在文件(用于测试)test.txt 中
[email protected],[email protected]
[email protected],[email protected]
[email protected]
[email protected]
[email protected]
并使用 sed 或 grep
cat test.txt | sed /AdminList/d
cat test.txt | grep -v AdminList
编辑:
cat test.txt | grep AdminList | awk -F"=" '{print $2}' | sed -n 1'p' | tr ',' '\n' | while read word; do if [ "$word" = "[email protected]" ]; then continue; else echo $word; fi; done
答案3
要直接使用 sed 编辑文件,请使用
sed -i '/[email protected]/d' file
答案4
命令
sed "/AdminList/s/abc1\@abc\.com,//g" filename
输入
[email protected],[email protected]
[email protected],[email protected]
[email protected]
[email protected],[email protected],[email protected],[email protected]
[email protected]
输出
[email protected],[email protected]
[email protected],[email protected]
[email protected]
AdminList=,[email protected],[email protected],[email protected]
[email protected]