这个命令几乎可以完成我需要的一切
cat /etc/passwd | cut -f6- -d : | sort | uniq
但我无法弄清楚如何整理特定的字符串
我需要从它出现的任何行中删除“/ remove / this”,我需要每行1个字不要分解文本行。
该命令的目的是列出系统上至少一个用户使用的所有shell,没有重复。
Wold欣赏任何意见。
答案 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}}