script062
题目
题目来源于 SHELL4 输出第5行的内容。
写一个 bash脚本以输出一个文本文件 nowcoder.txt
中第5行的内容。
示例, 假设 nowcoder.txt
内容如下:
welcome
to
nowcoder
this
is
shell
code
你的脚本应当输出:
is
脚本一
使用 cat -n
命令显示文件每一行的行号和内容;然后使用 grep -E
命令通过正则表达式提取第五行;由于每一行同时显示了行号和内容,所以需要通过 awk
命令提取到原行内容,即第二个数据域。
cat -n nowcoder.txt | egrep '[ ]+5' | awk '{print $2}'
# 注:上面在网站测试不能通过,似乎不支持 egrep 命令,可以使用 grep -E 替代
cat -n nowcoder.txt | grep -E '[ ]+5' | awk '{print $2}'
脚本二
head -n 5
表示获取文件前五行的内容,而最后使用 tail -n 1
表示获取最后一行的内容,通过管道符将前面的命令的结果传递给 tail
命令就可以提取到前五行内容的最后一行内容,即第五行的内容。
head -n 5 nowcoder.txt | tail -n 1
脚本三
sed
命令可以通过 '5p'
指定获得第五行的内容。
sed -n '5p' nowcoder.txt
脚本四
awk
命令也可以获取到指定行的内容,其中 NR
表示行号,NR==5
表示匹配第五行然后在后面的 {}
中输出。
awk 'NR==5{print $0}' nowcoder.txt
脚本五
还可以遍历文件中的所有行,通过一个自定义的变量记录行号,当行号为 5 时输出该行结果。
#!/bin/bash
i=0
while read line; do
i=$((${i}+1))
if [ $i -eq 5 ]; then
echo "${line}"
exit
fi
done < nowcoder.txt
脚本六
还可以使用 awk
命令的编程判断第五行。
awk '{if(NR==5) print $0}' nowcoder.txt