linux 显示文件中的特定行[已关闭]

ndh0cuux  于 2023-03-17  发布在  Linux
关注(0)|答案(4)|浏览(126)

**已关闭。**此问题为not about programming or software development。当前不接受答案。

此问题似乎与a specific programming problem, a software algorithm, or software tools primarily used by programmers无关。如果您认为此问题与another Stack Exchange site的主题有关,您可以留下评论,说明在何处可以回答此问题。
3天前关闭。
Improve this question
我想编写一个脚本,只使用grep显示文件的第三行,例如filename.txt,而不使用反引号&&,||或;或仅在一行中使用sed和awk。
所以我试了这个命令:grep -w "3" filename.txt,但似乎不起作用,是否进行了整改?

gopyfrb3

gopyfrb31#

不需要grep,因为您不是在搜索模式,而是要搜索第3行(或第 N 行)。
要获取第3行,您可以输出文件中的前3行,然后从这3行中获取最后一行:
head -3 filename.txt | tail -1
您提到了反勾号,所以如果您想赋值或输出它,请将它包含在$(...)中,而不是反勾号中。
linethree=$(head -3 filename.txt | tail -1)
如果文件非常大,并且所需的行 N 在文件中很远,则使用sed会更有效,例如
sed 4321q;d filename.txt
sed <n>q;d filename.txt
this answer中所概述的。

oiopk7p5

oiopk7p52#

使用BASH版本4或更高版本mapfile
使用mapfile仅读取第三行-s 2将丢弃2行,-n 1仅将1行复制到名为third_line的数组中:

mapfile -s 2 -n 1 third_line < filename.txt

输出数组内容:

printf "%s" "${third_line[@]}"
drnojrws

drnojrws3#

可以使用grep -n对行进行编号,然后将输出通过管道传输到另一个grep以提取第三行:

grep -n ^ file | grep ^3:

如果需要从行的开头删除3:,可以将其通过管道传输到

| cut -f2- -d:

或者,如果您坚持使用grep,则可以使用

| grep -Po '(?<=^3:).*'

即,仅输出在一行开始处的以3:为前导的部分(但是并不是所有地方都支持-P)。

1qczuiv0

1qczuiv04#

如果允许tail

grep --after-context=2 -m 1 -e ".*$" filename.txt | tail -n1

相关问题