如何在linux终端命令中从输出中删除字符串的所有实例

如何在linux终端命令中从输出中删除字符串的所有实例,linux,Linux,这个命令几乎完成了我需要的一切 cat /etc/passwd | cut -f6- -d : | sort | uniq 但我不知道如何整理一个特定的字符串 我需要从任何一行中删除“/remove/this”,并且我需要每行1个单词的文本行不被拆分 该命令的目的是列出系统上至少一个用户使用的所有shell,不重复 如果您有任何意见,我们将不胜感激 您可以使用sed。当您要查找的模式包含/时,应使用不同的分隔符。我觉得:可读性很强 cat /etc/passwd | cut -f6- -d

这个命令几乎完成了我需要的一切

cat /etc/passwd | cut -f6- -d : | sort | uniq 
但我不知道如何整理一个特定的字符串

我需要从任何一行中删除“/remove/this”,并且我需要每行1个单词的文本行不被拆分

该命令的目的是列出系统上至少一个用户使用的所有shell,不重复


如果您有任何意见,我们将不胜感激

您可以使用
sed
。当您要查找的模式包含
/
时,应使用不同的分隔符。我觉得
可读性很强

cat /etc/passwd | cut -f6- -d : | sort | uniq | sed s:/remove/this::
由于sed将更改一些行,因此最好将sort+uniq移动到管道的末尾<代码>排序-u组合两个程序

cat /etc/passwd | cut -f6- -d : | sed s:/remove/this:: | sort -u

您可以使用单个awk命令执行以下操作:

awk -F: '{sub(/\/remove\/this/, "", $NF);a[$NF]} END{for(i in a){print i}}' /etc/passwd
-F:
拆分行

第一个块在每一行输入上运行,而
sub(/\/remove\/this/,“”,$NF)
从最后一列中删除字符串,并且
a[$NF]
为passwd中找到的每个shell创建和索引。显然,如果索引已经存在,则不会再次创建它。这样我们就可以重复数据


在输入的<代码>结束/代码>中,我们重复使用数组<代码> A<代码>,并打印每个索引:<代码> { for(i在A){打印}} < /代码>

您考虑SED吗?我尝试使用SED-I -E’/\这样的东西是您想要的,但是用更简单的模式做一些实验。用“\”转义
/
,或者只使用另一个字符(任何一个都可以,但不出现在passwd中)。我建议您将问题改为“为什么这个sed模式不起作用?”,因为它应该并且在正确完成后会起作用。这样你会得到更好的响应。这仍然会在每一行中留下/删除/这个。你确定在模式中没有拼写错误吗?我确定,我有cat/etc/passwd | cut-f6--d:sort | uniq | sed s:/remove/This::但是/删除/这个仍然在相同的输出行中。啊,我的错误,我拼写错了。它起作用了。很抱歉。使用正则表达式,当您输入错误时,将不会收到错误消息。因此,小的打字错误偷偷地出现并不罕见。当您不知道表达式为什么不工作时,只需从一个非常短的表达式开始,如
s:/:
,然后测试它是否工作。然后你可以一步一步地增加复杂性,直到你得到了你想要的确切结果。