输出etc / passwd,删除注释并过滤

时间:2018-07-17 11:45:35

标签: bash command

我正在尝试完成一项任务,在该任务中,我必须编写命令行以显示cat / etc / passwd命令的输出并进行大量过滤 我尝试了以下

#!/bin/sh
cat /etc/passwd | grep -v '\#' | sed '1!n;d' | cut -d':' -f1 | rev | sort -r | awk 'NR>= ENVIRON["FT_LINE1"] && NR<= ENVIRON["FT_LINE2"]' | paste -s -d"," - | sed 's/,/, /g' | sed 's/$/./' | tr -d '\n'

但是执行它时没有给出任何结果(我只是执行./name.sh) 非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

从我们添加的注释来看,您似乎只是缺少将环境变量设置为某个值才能使代码工作的情况。像这样修改脚本:

#!/bin/sh
#
# Modify these values as required
export FT_LINE1=3
export FT_LINE2=8    

cat /etc/passwd | \
    grep -v '\#' | \
    sed '1!n;d' | \
    cut -d':' -f1 | \
    rev | \
    sort -r | \
    awk 'NR>= ENVIRON["FT_LINE1"] && NR<= ENVIRON["FT_LINE2"]' | \
    paste -s -d"," - | \
    sed 's/,/, /g' | \
    sed 's/$/./' | \
    tr -d '\n'

\将在下一行继续执行命令。我发现以这种方式更容易阅读和调试。

FT_LINE1和FT_LINE2的值可以从参数中读取,也可以在脚本外部的shell环境中设置。