如何基于shell函数参数执行条件grep?

时间:2016-11-04 14:36:50

标签: bash shell if-statement pipe

我有以下功能:

grep -Ev '^\s*PATTERN\s+'

该命令的第一部分过滤了一些内容。在命令的最后一部分中,我希望仅在参数 $2设置并且等于让我们说VALUE时使用cat -n 进行过滤,在管道到最后function long_command() { cat $1 | grep -vE '[a-fA-F0-9]{5}' | \ cat -n | sed -e 's/ / /g' | \ sed -e 's/^ *//g' | \ sort -k 3,3 -k 1n,1n | \ uniq -f 2 | \ sed -e 's/^[0-9]\{1,\} //' | \ if [ "$2" -eq "VALUE" ]; then grep -Ev '^\s*PATTERN\s+'; fi | \ cat -n } 之前。我怎么能这样做?

这不起作用:

-bash: [: : integer expression expected

我收到错误:

cat -n

使用if的正确方法是什么,并将if的结果传递给x = [[1,2],[2.3,59]] y = str(x) backToList = list(y) backToList = ['[', '[', '1', ',', ' ', '2', ']', ',', ' ', '[', '2', '.', '3', ',', ' ', '5', '9', ']', ']']

感谢您的关注。

1 个答案:

答案 0 :(得分:1)

您不能使用管道命令中显示的if/else,因为else部分中没有任何内容。另外-eq需要整数比较。

你可以这样做:

long_command() {
     grep -vE '[a-fA-F0-9]{5}' "$1" |
     cat -n |
     sed 's/    / /g' |
     sed 's/^  *//g' |
     sort -k 3,3 -k 1n,1n |
     uniq -f 2 |
     sed 's/^[0-9]\{1,\} //' |
     { [[ $2 == "VALUE" ]] && grep -Ev '^\s*PATTERN\s+' || cat; } | cat -n
}

我在开始时删除了多余的cat,并且在\之后无需使用|在新行上输入下一个命令。

在最后一根烟斗之后你也可以使用:

if [[ "$2" == "VALUE" ]]; then grep -Ev '^\s*PATTERN\s+'; else cat; fi