1. 程式人生 > >linux 常用文本操作

linux 常用文本操作

cat tail python

cat 連接文件,打印到標準輸出設備上

語法介紹

cat [OPTION]... [FILE]...
-A --show-all 等價於-vET
-b 顯示編號去除空行
-n 顯示編號包括空行
-E 顯示行結束符
-s 連續的多行空白,顯示一行
-T 顯示tab
-v 使用 ^ 和 M- 符號,除了 LFD 和 TAB 之外。

使用場景:

顯示行號

[root@localhost ~]# cat -n anaconda-ks.cfg

連接查看

[root@localhost ~]# cat -n anaconda-ks.cfg /etc/hosts

合並文件

[root@localhost ~]# cat t1 t2 > t3

重定向文本輸入

[root@localhost ~]# cat << EOF
hello world
EOF
hello world

重定向文件輸入

[root@localhost ~]# cat < anaconda-ks.cfg


more

按百分比顯示文件,有過濾,搜索功能,對於大文件比cat更方便閱讀

參數:

-num 一次顯示的行數
-d 提示使用者,在畫面下方顯示 [Press space to continue, ‘q‘ to quit.] ,如果使用者按錯鍵,則會顯示 [Press ‘h‘ for instructions.] 而不是 ‘嗶‘ 聲
-l 取消遇見特殊字元 ^L(送紙字元)時會暫停的功能

-f 計算行數時,以實際上的行數,而非自動換行過後的行數(有些單行字數太長的會被擴展為兩行或兩行以上)
-p 不以卷動的方式顯示每一頁,而是先清除螢幕後再顯示內容
-c 跟 -p 相似,不同的是先顯示內容再清除其他舊資料
-s 當遇到有連續兩行以上的空白行,就代換為一行的空白行
-u 不顯示下引號 (根據環境變數 TERM 指定的 terminal 而有所不同)
+/pattern 在每個文檔顯示前搜尋該字串(pattern),然後從該字串之後開始顯示
+num 從第 num 行開始顯示
fileNames 欲顯示內容的文檔,可為復數個數

操作命令:

Enter 向下n行,需要定義。默認為1行
Ctrl+F 向下滾動一屏

空格鍵 向下滾動一屏
Ctrl+B 返回上一屏
= 輸出當前行的行號
:f 輸出文件名和當前行的行號
V 調用vi編輯器
!命令 調用Shell,並執行命令
/keyword 搜索關鍵字
q 退出more

常用操作:

[root@localhost ~]# more -s -20 anaconda-ks.cfg


less

比more更加靈活,鼠標可以往前往後滾動,隨意瀏覽,還是懶加載,參數用法跟more類似

常用操作:

[root@localhost ~]# less -s -20 anaconda-ks.cfg


head

查看文件前幾行

[root@localhost ~]# head -2 anaconda-ks.cfg


tail

查看文件末尾幾行,還有監控文件功能

參數:

-n 顯示行數
-f 監控文件

常用操作

[root@localhost ~]# tail -2 anaconda-ks.cfg
[root@localhost ~]# tail -f anaconda-ks.cfg


基於python實現 tail查看文件末尾幾行功能

def read_last_lines(filename,lastlines=1):

    f = open(filename, ‘rb‘)
    first_line_data,first_tell = f.readline(),f.tell()
    f.seek(0)
    seek = 0

    #第一層循環判斷是否為空文件
    for i in f:
        while True:
            f.seek(seek,2)
            current_tell = f.tell()
            seek -= 1
            data = f.readlines()

            if(first_tell == current_tell and not data):
                f.close()
                return  ‘1‘,[first_line_data]
            elif(first_tell == current_tell and data):
                if(len(data)<lastlines):
                    data.insert(0,first_line_data)
                f.close()
                return  ‘2‘,data
            else:
                if(lastlines != 1):
                    if(len(data) == lastlines):
                        return  ‘3‘,data
                else:
                    if (len(data) == 1):
                        if (first_tell == f.tell()):
                            f.close()
                            return ‘4‘, data[-1:]

                    if (len(data) > 1):
                        f.close()
                        return  ‘5‘, data[-1:]

data = read_last_lines(‘test2.txt‘,lastlines=10)
print(data)

未完待續....

linux 常用文本操作