我希望while循环忽略空白(空)行和包含#
的行我尝试在输入文件中包含sed -e's /#.*$//'-e'/ ^ $ / d'并将其通过管道传递到while循环中。这没用。
file=$(sed -e 's/#.*$//' -e '/^$/d' foo.txt)
while IFS=: read -r f1 f2 f3 f4; do
Command
done <"$file"
答案 0 :(得分:4)
您正在尝试以文件名打开该输出,几乎可以肯定不是。
在子shell中运行sed,并将其输出重定向到while循环。
while IFS=: read -r f1 f2 f3 f4; do
# do something
done < <(sed -e 's/#.*$//' -e '/^$/d' foo.txt)
对于对此答案中使用的语法如何工作感兴趣的任何人,请参见the bash-hackers' wiki on process substitution,以及为什么此语法比sed ... | while read ...
更好的原因,请参见BashFAQ #24。
答案 1 :(得分:0)
您可以使用grep
:
grep -Ev '^\s*$|^\s*#' foo.txt | while IFS=: read -r f1 f2 f3 f4; do
Command
done
答案 2 :(得分:-2)
使用grep -v:
-v, --invert-match select non-matching lines