在if条件下使用head -n

时间:2013-12-20 15:48:28

标签: bash if-statement

我目前正在尝试使用bash评估目录中的txt文件。我想知道txt文件的第三行是否与某个字符串匹配。该文件以两个空行开头,然后是目标字符串。我测试了以下一个班轮:

if [[ $(head -n 3 a_txt_file.txt) == "target_string" ]]; then echo yes; else echo no; fi

我可以想象,因为head -n 3也打印出两个空行,我必须将它们添加到if条件中。但"\n\ntarget_string""\n\ntarget_string\n"也不起作用。

如何正确地做到这一点(我想它也可以更优雅地完成)?

5 个答案:

答案 0 :(得分:3)

如果您只需删除前两行:

head -n 3 | tail -1

答案 1 :(得分:3)

试试这个 - 它只打印第三行:

sed -n 3p file.txt

答案 2 :(得分:3)

除了sed,你可以尝试awk打印第3行

awk 'NR==3'

答案 3 :(得分:3)

您需要使用sed代替head。获得第三行,测试它是否匹配,然后如果它匹配,你可以用它做任何你想做的事。

if [[ $(sed '3q;d' test_text.txt ) == "target_string" ]]; then echo yes; else echo no; fi

答案 4 :(得分:1)

bash解决方案:

if { read; read; read line; } < test_text.txt
   [[ $line = target_string ]]
then
    echo yes
else
    echo no
fi < test_text.txt

这利用了if语句的条件可以是一系列命令的事实。首先,从文件中读取两次以丢弃空行;第三行将line设置为第3行。之后,您可以针对目标字符串进行测试。