1. 程式人生 > >Shell程式設計-檔案讀取方法集錦

Shell程式設計-檔案讀取方法集錦

 

1 ,在這裡總結一下Shell讀取檔案的方法

a),
#使用read命令讀取一行資料
while read myline
do
    echo "LINE:"$myline
done < datafile.txt

b),
#使用read命令讀取一行資料
cat datafile.txt | while read myline
do 
    echo "LINE:"$myline
Done

c),
#讀取一行資料
cat datafile.txt | while myline=$(line)
do 
    echo "LINE:"$myline
Done

d),
#讀取一行資料
while myline=$(line)
do 
    echo "LINE:"$myline
done < datafile.txt

e),
#使用read命令讀取變數資料
cat datafile.txt | while read paraa parab parac
do
    echo "PARAA:"$paraa
    echo "PARAB:"$parab
    echo "PARAC:"$parac
Done

f),
#使用read命令讀取變數資料
while read paraa parab parac
do
    echo "PARAA:"$paraa
    echo "PARAB:"$parab
    echo "PARAC:"$parac
done < datafile.txt

G),

下面這個是在學習公司的程式碼時碰到的,其實不能算是讀取檔案,應該算是從標準輸入讀取,程式碼如下:

	#!/bin/sh 
	
	ip=192.168.253.111
	while read line <&3 ; do
	        echo "  attempt with ($line)"
	        # Try to connect and exit when done if it worked.
	        $line && exit 0
	done 3<<EOF
	/usr/bin/rlogin -l snap-admin $ip
	/usr/bin/ssh 
[email protected]
$ip /usr/bin/ssh [email protected]$ip /usr/bin/ssh [email protected]$ip EOF

網上有解釋說下面這個格式:

<<EOF

(內容)

EOF

    把EOF替換成其他東西

意思是把內容當作標準輸入傳給程式

在這個例子中這麼寫 3<<EOF 應該是把它重定向到一個檔案描述符中,大家都知道檔案描述符都是一個整形,這裡的3就是作為一個檔案描述符來用。

這裡再簡要回顧一下< <的用法。當s h e l l看到< <的時候,它就會知道下一個詞是一個分界符。在該分界符以後的內容都被當作輸入,直到

s h e l l又看到該分界符(位於單獨的一行)。這個分界符可以是你所定義的任何字串。

下面是對常見的檔案描述符命令的整理:

	command > filename  把標準輸出重定向到一個新檔案中
	 command >> filename  把標準輸出重定向到一個檔案中(追加)
	 command 1 > filename  把標準輸出重定向到一個檔案中
	 command > filename 2 >&1 把標準輸出和標準錯誤一起重定向到一個檔案中
	 command 2 >filename  把標準錯誤重定向到一個檔案中
	 command 2 >> filename  把標準錯誤重定向到一個檔案中(追加)
	 command >> filename 2 >&1 把標準輸出和標準錯誤一起重定向到一個檔案中(追加)
	 command < filename > filename2 command命令以filename檔案作為標準輸入,
	      以filename2檔案作為標準輸出
	 command < filename  command命令以filename檔案作為標準輸入
	 command << delimiter  從標準輸出中讀入,直至遇到delimiter分界符
	 command <&m   把檔案描述符m作為標準輸出
	 command >&m   把標準輸出重定向到檔案描述符m中
	 command <&-   關閉標準輸入

2 ,就read命令的使用方法整理如下:

read命令從標準輸入讀取一行,並把輸入行的每個欄位(以指定的分隔符分隔)的值賦給命令列上的變數。 

read [-ers] [-u fd] [-t timeout] [-p prompt] [-a array] [-n nchars] [-d delim] [name ...]

引數解析: 

-e

-r

指定讀取命令把\(反斜槓)做為輸入行的一個普通字元,而非控制字元。

-s

安靜模式。如果指定該引數且從終端讀入資料,那麼輸入的時候將不回顯在螢幕上。

-u <fd>

指定讀入資料的檔案描述符,不再使用預設的標準輸入。

-t <timeout>

等待標準輸入的超時時間,單位為秒。如果在指定的時間內沒有輸入,即時返回。

-p <prompt>

列印提示符,等待輸入,並將輸入賦值給REPLY變數或者指定的變數。

-a <array>

讀入一組詞,依次賦值給陣列array

-n <nchars>

讀取指定的字元數。如果已讀取n個字元,馬上返回,下次從返回點繼續讀取;如果已到行結束,無論滿不滿足n個字元都返回。

-d <delim>

指定行結束符,讀到該字元就當做一行的結束。

name ...

指定read變數。read讀取一行資料後,分隔行資料為各個欄位,然後將欄位依次賦給指定的變數。如果分隔後的欄位數目比指定的變數多,那麼將把剩餘的全部欄位值都賦給最後的那個變數;反之,剩餘的變數被賦值為空字串。如果read沒有指定變數,系統使用預設的REPLY作為預設變數名。 

使用重定向讀取資料 

exec 6< datafile.txt
while read -u 6 myline
do
    echo "LINE:"$myline
done

變數分隔符 
read命令預設的分隔符是空格,多個空格被當做一個空格處理。我們也可以使用IFS(內部欄位分隔符)指定的的字元作為分隔符。假如有如下內容的一個檔案,它以$來分隔變數,希望把每個變數區別開來,可以使用如下指令碼: 

baidu$google$tencnt$sina

123456789

#使用read命令讀取變數資料
while read paraa parab parac parad
do
    echo "PARAA:"$paraa
    echo "PARAB:"$parab
    echo "PARAC:"$parac
    echo "PARAD:"$parad
done < datafile.txt
執行指令碼的輸出如下: 
PARAA:baidu
PARAB:google
PARAC:tencent
PARAD:sina
PARAA:123456789
PARAB:
PARAC:

相關推薦

Shell程式設計-檔案讀取方法集錦

  1 ,在這裡總結一下Shell讀取檔案的方法 a), #使用read命令讀取一行資料 while read myline do echo "LINE:"$myline done < datafile.txt b), #使用read命令讀取一行資料 cat

asset裡面gson檔案讀取方法

1.讀取asset目錄下json檔案並轉成bean InputStream is=getResources().getAssets().open("xxxx.json"); ByteArrayOutputStream baos=new ByteArrayOutputStr

python中常見csv檔案讀取方法比較

示例資料集:UCI的電離層(Ionosphere) 要實現的資料集的讀取功能: 該資料集共有351行,每行有35個值,前34個為我們要的資料集,最後一個值是’g’或者’b’,表示資料的好壞,我們的任務就是在這個文字資料的前34列分出來,得到我們要的資料dat

Shell_Linux bash shell 逐行讀取檔案的三種方法

方法一,指定換行符讀取: #! /bin/bash     IFS="  "     for LINE in `cat /etc/passwd`  do            echo $LINE d

Linux--shell 讀取配置檔案方法

配置檔案config內容如下ID=123 IP=192.168.3.154 Name=test 方法一,利用sed解析文字,提取配置資訊 id=`sed '/^ID=/!d;s/.*=//' urfile` ip=`sed '/^IP=/!d;s/.*=/

Linux檔案的特殊許可權位SUID、SGID作用及程式設計設定/讀取

起 最近在搞android裡面的su(不是為了做root提權,那是別的部門乾的事)。學習了一些新東西,挺有意思。 以下文章假定你的android裝置已經被root了,有獲取root許可權的能力,或者在Linux環境下。 SU這個程式嘛,說簡單一點就是讓你的

python讀取檔案方法 python計算檔案的行數和讀取某一行內容的實現方法

 python計算檔案的行數和讀取某一行內容的實現方法 :最簡單的辦法是把檔案讀入一個大的列表中,然後統計列表的長度.如果檔案的路徑是以引數的形式filepath傳遞的,那麼只用一行程式碼就可以完成我們的需求了:   1、http://blog.csdn.net/shudaq

Shell程式設計---批量建立檔案

1) 請使用for迴圈在指定的/yuki目錄下建立10個檔案,檔名分別為: yuki-1.html, yuki-2.html, yuki-3.html, ..... yuki-10.html 分析: 所有檔名首尾相同,只是中間部分以數字的規律變化了,所以檔名可以用數字迴

java中讀取檔案方法

不同的方法需要匯入不同的包,使用Ctrl+Shift+O導包即可。 import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExc

java 中配置檔案讀取的3種不同方法

前言 java在載入配置檔案的時候, 會優先去探尋 Source Folder 這類檔案 所以 可以將 配置檔案 放在 src 同級位置, 或者存放 在一個 新建Source Folder中 配置檔案 新建一個 mysql.properties 配置檔案 “=”

flash讀取外部xml配置檔案基本方法

XML,xml是可擴充套件標記語言的縮寫,全稱為Extensible Markup Language,主要研究什麼 是資料和資料的儲存問題。簡單的說就是如果你想通過讀取外部配置來改變程式載入的功能,可以用到它。         1.一個簡單的XML示例

DataFrame讀取寫入檔案方法

DataFrame有非常豐富的IO方法,比如DataFrame讀寫csv檔案excel檔案等等,操作很簡單。下面在程式碼中標記出來一些常用的讀寫操作方法,需要的時候查詢一下該方法就可以了。 import pandas as pd from pandas import Series,

shell程式設計-使用echo建立檔案並追加內容

echo命令常用的用法是在終端列印字串。我們還可以將字串列印到我們自定義的檔案中,即重定位。 例1: [email protected]:~/liyijun$ echo "this is my test" > a.txt [email protected]:~/li

java 讀取專案外面配置檔案方法

public static void loadProps(String propertiesUrl) { props = new Properties(); InputStream in = null; try { in =new BufferedInputStr

web工程讀取自定義xml配置檔案方法

       以前都是在c++中我都是習慣用ini配置檔案,接觸webx框架後,一般都是用得配置好的xml檔案,偷懶結果就是把自己給坑了。在需要自定義配置檔案的之後踩到了坑,特此記錄下。         此處我想讀取

在python中讀取TXT檔案方法

【時間】2018.11.14 【題目】(轉載)在python中讀取TXT檔案的方法 【轉載連結】https://www.cnblogs.com/youyou0/p/8921719.html 一、讀檔案  1.簡單的將檔案讀取到字串中   f = open(

Python檔案讀取常用方法---待編輯

1. 關於讀取檔案 f.read() 讀取檔案中所有內容 f.readline() 讀取第一行的內容 f.readlines() 讀取檔案裡面所有內容,把每行的內容放到一個list裡面 注:因

非同步程式設計-非同步讀取檔案

這篇文章我們學習如何用非同步程式設計來讀取檔案。 使用System.IO.Stream類的非同步呼叫方法,對檔案out.txt進行非同步讀操作。 執行結果: 原始碼: using System; using System.Collections.Generic; using

shell檔案讀取批量檔名並做命令列操作

222檔案內容: /home/zhangsuosheng/Desktop/9-30/9_30/1bak/1538291162.png /home/zhangsuosheng/Desktop/9-30/9_30/1bak/1538291212.png /home/zhangsuosheng/Deskto

JS 檔案讀取的進度條顯示方法(FileReader、onprogress)——20181116

這裡FileReader只是從磁碟把檔案讀取到瀏覽器,並沒有傳送到伺服器。參考連結1       參考連結2 <!DOCTYPE html> <html > <head> <meta charset="UTF-8"