检查文件中特定行是否为空的Bash命令

3

我正在尝试通过添加错误捕获来修复一个Bash脚本。我有一个文件(list.txt),通常包含如下内容:

People found by location:  
person: john [texas]  
more info on john

有时候文件会受到损坏,只剩下第一行内容:
People found by location:

我正在寻找一种方法来检查文件,以查看第二行是否存在任何数据,并希望将其包含在我的bash脚本中。这可能吗?

4个回答

2
简洁明了:
if test $(sed -n 2p < /path/to/file); then
    # line 2 exists and it is not blank
else
    # otherwise...
fi

使用sed仅提取第二行。当文件中存在第二个非空白行时,test表达式将只计算为真。


wc -l /path 会打印两列,其中只有一列是整数。 - William Pursell
1
做起来可能更加简洁的方式是:wc -l < /path - William Pursell
谢谢您的建议!我还无法使其正常工作...它返回了“line 1: test: too many arguments”的错误信息。我现在正在尝试威廉的建议。谢谢大家! - Matt H
按照William的建议,在-1和/path之间添加<符号,这个问题已经解决了。我无法表达我的感激之情。干杯! - Matt H
@Janos 我说了什么吗?实际上,你的编辑揭示了你所拥有的各种想法 :) - devnull

1
我假设您想检查给定文件的第二行是否包含任何数据。
[ "$(sed -n '2p' inputfile)" != "" ] && echo "Something present on line 2" || echo "Line 2 blank"

这将适用于输入文件只有一行的情况。
如果您只想检查输入文件是否有一行或更多行,可以这样说:
[ "$(sed -n '$=' z)" == "1" ] && echo "Only one line" || echo "More than one line"

1
听起来你想检查你的文件是否有超过1行。
if (( $(wc -l < filename) > 1 )); then
    echo I have a 2nd line
fi

0

另一种不需要外部命令的方法是:

if ( IFS=; read && read -r && [[ -n $REPLY ]]; ) < /path/to/file; then
    echo true
else
    echo false
fi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接