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

时间:2016-02-03 12:38:22

标签: linux

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

cat /etc/passwd | cut -f6- -d : | sort | uniq 

但我无法弄清楚如何整理特定的字符串

我需要从它出现的任何行中删除“/ remove / this”,我需要每行1个字不要分解文本行。

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

Wold欣赏任何意见。

2 个答案:

答案 0 :(得分:1)

您可以使用sed。当您要查找的模式包含/时,您应该使用不同的分隔符。我发现:非常易读。

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

由于sed会改变某些行,因此最好将sort + uniq移动到管道的末尾。 sort -u结合了两个计划。

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

答案 1 :(得分:1)

您可以使用单个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创建和索引。显然,如果索引已经存在,则不会再次创建它。这样做我们会对数据进行重复数据删除。

在输入的END处,我们正在通过数组a进行迭代并打印每个索引:{for(i in a){print i}}