我目前正在尝试使用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"
也不起作用。
如何正确地做到这一点(我想它也可以更优雅地完成)?
答案 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行。之后,您可以针对目标字符串进行测试。