簡體   English   中英

如何從 bash 中的文本文件中讀取第 n 行?

[英]How to read n-th line from a text file in bash?

假設我有一個名為“demo.txt”的文本文件,如下所示:

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

現在我想讀取某一行,比如第 2 行,其命令如下所示:

Line2 = read 2 "demo.txt"

所以當我打印它時:

echo "$Line2"

我去拿:

5 6 7 8

我知道如何使用“sed”命令從文件中打印第 n 行,但不知道如何讀取它。 我也知道“讀取”命令,但不知道如何在某行中使用它。

在此先感謝您的幫助。

使用headtail

$ head -2 inputFile | tail -1
5 6 7 8

要么

一般化版本

$ line=2
$ head -"$line" input | tail -1
5 6 7 8

使用sed

$ sed -n '2 p' input
5 6 7 8
$  sed -n "$line p" input
5 6 7 8

它能做什么?

  • -n禁止正常打印圖案空間。

  • '2 p'指定行號, 2或( $line為更一般), p命令打印當前模式空間

  • input輸入文件

編輯

要將輸出轉換為某個變量,請使用一些命令替換技術。

$ content=`sed -n "$line p" input`
$ echo $content
5 6 7 8

要么

$ content=$(sed -n "$line p" input)
$ echo $content
5 6 7 8

獲取bash數組的輸出

$ content= ( $(sed -n "$line p" input) )
$ echo ${content[0]}
5
$ echo ${content[1]}
6

使用awk

也許awk解決方案可能看起來像

$  awk -v line=$line 'NR==line' input
5 6 7 8

感謝Fredrik Pihl提出的建議。

Perl 對此也有方便的支持,而且它實際上是最直觀的!

觸發器運算符可以與行號一起使用:

$ printf "0\n1\n2\n3\n4" | perl -ne 'printf if 2 .. 4'
1
2
3

請注意,它是基於 1 的。

您還可以混合使用正則表達式:

$ printf "0\n1\nfoo\n3\n4" | perl -ne 'printf if /foo/ .. -1'
foo
3
4

-1指最后一行)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM