我必須在文件的第一行放置一個bash變量。我想這是與grep命令,但它是限制行數的任何方式?如何在bash腳本中獲取文件的第一行?
回答
head
採取第一線,從一個文件,並且-n
參數可用於指定多少行應提取:
line=$(head -n 1 filename)
line=$(head -1 file)
將正常工作。 (如前面的答案)。但是
line=$(read -r FIRSTLINE < filename)
會稍微快一點,因爲read
是一個內置的bash命令。
第二種方法不能像寫入,因爲'read'不會打印任何東西(所以'line'變成空白),並且也在子shell中執行(所以'FIRSTLINE'被設置爲第一行,但只在子shell中,因此之後不可用) 。解決方案:只需使用'read -r line
使用bash讀取第一行,使用read
聲明。例如
read -r firstline<file
firstline
將是你的變量(無需分配到另一個)
嘗試使用'cat ... |讀取-r VAR'並且它失敗:( – sorin 2013-05-31 13:22:02
你怎樣讀第二行? – qed 2014-02-24 22:10:43
@sorin,'cat ... | var VAR在大多數shell中都會失敗(據我所知除了'zsh'之外),因爲管道中的每個組件都將運行在不同的子shell中,這意味着'$ VAR'將在子shell中設置(在管道完成執行後立即停止存在),而不是在調用shell中。 '讀取VAR << EOF \ n $(cat ...)\ nEOF'(其中每個'\ n'都是一個換行符)。 – zrajm 2017-03-28 11:12:43
這足以和存儲的filename
在變量$line
的第一行:
read -r line < filename
我也喜歡awk
爲此:
awk 'NR==1 {print; exit}' file
要存儲行本身,請使用var=$(command)
語法。在這種情況下,line=$(awk 'NR==1 {print; exit}' file)
。
甚至sed
:
sed -n '1p' file
具有同等line=$(sed -n '1p' file)
。
查看示例,當我們喂read
與seq 10
,也就是說,數字從1到10的順序:
$ read -r line < <(seq 10)
$ echo "$line"
1
$ line=$(awk 'NR==1 {print; exit}' <(seq 10))
$ echo "$line"
1
'sed'1!d; q''(或者'sed -n '1p; q'')會模仿你的'awk'邏輯c並阻止進一步閱讀文件。因爲我們只想要第一行,所以我們可以用'sed q'或'awk'1; {exit}''或者甚至'grep -m1 ^'(更少的代碼,相同的基本邏輯)來作弊。 (這不是對downvote查詢的回覆。) – 2016-06-01 23:45:20
@AdamKatz這是一套非常好的方法,謝謝!我發現'grep'非常聰明。我們當然也可以說'head -n 1 file'。 – fedorqui 2016-06-02 08:26:25
是的,'head -n1'會更快(更小的二進制加載),'read'會更快(不需要二進制加載,這是內置的)。當我剛剛打印第一行時,我特別喜歡'grep -m1 --color .',因爲它也會爲此行添加顏色,這對於表格標題非常有用。 – 2016-06-02 15:53:03
的問題沒有問這是最快的,但要加到sed答案,-n'1p'表現不佳,因爲模式空間仍在大文件上掃描。出於好奇,我發現,「頭」戰勝SED狹義:
# best:
head -n1 $bigfile >/dev/null
# a bit slower than head (I saw about 10% difference):
sed '1q' $bigfile >/dev/null
# VERY slow:
sed -n '1p' $bigfile >/dev/null
只是echo
源文件的第一清單到你的目標文件。
echo $(head -n 1 source.txt) > target.txt
對於哪個'head -n 1 source.txt> target.txt'將完全相同。 – YoYo 2016-12-12 05:19:13
- 1. bash腳本無法讀取第一行
- 2. bash腳本將文本追加到文件的第一行
- 3. 如何從bash中的文本文件讀取第n行?
- 4. bash從s3獲取文件的腳本
- 5. 如何在Bash腳本中逐行讀取文件?
- 6. bash腳本以從第二bash腳本獲取變量
- 7. 如何從bash腳本中的文件逐行讀取?
- 8. bash腳本在包含特殊行的子文件夾中獲取文件
- 9. 用bash腳本逐行讀取文件
- 10. 如何從bash中的.csv文件的第一行獲取特定列?
- 11. bash腳本讀取文件
- 12. Linux Bash腳本:如何獲取沒有路徑的文件?
- 13. 在bash腳本中執行jar文件
- 14. 在Perl中獲取文件的第一行作爲腳本的參數
- 15. 如何獲取在zsh中執行腳本的父文件夾?
- 16. 從bash腳本的Linux文本中獲取一些報告
- 17. 運行BASH腳本文件
- 18. bash腳本獲得前5行並放在另一個文件
- 19. ForeverJS第一行bash腳本錯誤
- 20. bash腳本:統計唯一行文件
- 21. 從Postgresql獲取行的Bash腳本
- 22. Bash腳本 - 如何從文本文件中刪除行/單詞?
- 23. 如何在bash腳本中替換文件的特定行?
- 24. 如何在bash腳本中寫入文件的特定行?
- 25. 執行Node.js的文件中bash腳本
- 26. 如何讓bash腳本使用空格來獲取文件名?
- 27. 的Automator服務,bash腳本:獲取文件夾的文件
- 28. 用Bash腳本替換文件中的第一個空格
- 29. 如何刪除perl腳本中的第一行文件
- 30. 如何從bash腳本中獲取csh腳本
比read方法的開銷要大得多。 '$()'分離出一個子shell,並且使用外部命令(* any * external command)意味着你調用'execve()',調用鏈接器和加載器(如果它使用共享庫,通常情況下)等 – 2017-08-01 16:17:17
它可能更短:'line =「$(head -1 FILENAME)」' – nikolay 2017-08-10 16:20:19
還有: 'line = \'head -1 FILENAME \'' – 2018-02-13 10:22:46