Bash 是否删除grep在变量中生成的空行?
我正在寻找一种方法来实现这一点: 我希望它给出他找到的所有匹配项,如果他找不到任何东西,就不要空行Bash 是否删除grep在变量中生成的空行?,bash,variables,grep,lines,string,Bash,Variables,Grep,Lines,String,我正在寻找一种方法来实现这一点: 我希望它给出他找到的所有匹配项,如果他找不到任何东西,就不要空行 lines=($(cat fee.file | awk '{print $1}')) for line in ${lines[@]}; do dropper="$(cat foo.file | grep ${checkvar[$nr]})" ((nr++)) done echo $dropper 它给了我: 4594 4044 4950 4503 现在我只想在有数字
lines=($(cat fee.file | awk '{print $1}'))
for line in ${lines[@]}; do
dropper="$(cat foo.file | grep ${checkvar[$nr]})"
((nr++))
done
echo $dropper
它给了我:
4594
4044
4950
4503
现在我只想在有数字的时候做一个动作,而当它是空的时候我什么也不想做。
所以我把它添加到for循环中
if ! [[ -z $dropper ]]; then
echo $dropper
fi
但这不起作用。它仍然在我的屏幕上打印空行!
不知何故,即使grep找不到什么东西,它也会用一些东西填满$dropers。我甚至尝试用sed、grep或awk删除白线。。但没有任何帮助
如何仅在$droppers实际已填充时激活if语句
foo.file中只填充了很多行,其中只有数字。。比如:
4594
4595
4597
2489
3949
fee.file将具有相同的数字,但约有10%的数字与foo.file中的数字匹配以下内容将打印fee.file中每个输入数字的foo.file中的匹配行。你可能正在尝试做一些更复杂的事情,但这在你的帖子中并不清楚;如果是这样,请告诉我
lines=($(cat fee.file | awk '{print $1}'))
for line in ${lines[@]}; do
grep $line foo.file;
done;
那么:
#!/bin/bash
while read number remainder
do
dropper="$(grep -w $number foo.file)"
if [ $? -eq 0 ]; then
echo "$dropper found"
else
echo "$number not found"
fi
done < "fee.file"
我的输出是:
1 found
101 found
201 found
301 found
401 found
501 found
601 found
701 found
801 found
901 found
1001 not found
在您的例子中,您可以将do循环替换为${lines[@]}中的数字的
;做完成
你用的是哪个外壳?你能发布一些关于foo.file
的例子和一个工作脚本吗?我认为它是debian版本7,而foo文件中只填充了一长串数字。没什么特别的。你能发布echo$SHELL
并发布结果吗?它没有给我任何东西。。只有/bin/bashSo,您使用的是Bash作为shell;-)谢谢嗨,谢谢你的回复!,你就快到了。我基本上想要的是比较两个文件中的reandom数字,并给出两个文件中的一次。出于更复杂的原因,为了提高速度,我想使用grep直接grep匹配的数字并打印出来。最后,我想要一个if语句,如果他找到匹配的数字,就执行action1,如果他找不到匹配的数字,就执行action2。OMG!它起作用了。。你不知道我吃这个有多久了我爱你。。谢谢你能解释一下美元吗-你知道我是怎么把一个变量设为空的吗。。。我真的不确定我是否在一次尝试中使用了右十八,如果我的整个[$?-eq 0]$$stuf对我来说是新的。如果“do action1”或“do action2”?$?
包含最后一个命令的退出代码,我如何将其转换为。因此,如果grep
失败,$?
为非零。我已经将代码更改为if。。。然后。。。else
construct。使用unset var
取消设置变量var
;-)
1 found
101 found
201 found
301 found
401 found
501 found
601 found
701 found
801 found
901 found
1001 not found