我有以下功能:
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', ']', ']']
?
感谢您的关注。
答案 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