根據日期字符串截取日誌文件
sed 按行處理,不會將整個文件加載到內存中
要切出從2012-02-09到2012-09-10的所有數據行,(假設你的日誌文件以yyyy-MM-dd的日期格式開頭)只需要:
sed -n '/^2012-02-09/,/^2012-09-10/p' whole.log > part.log
查看系統64位還是32位:
getconf LONG_BIT
修改文件權限
$ chmod u+x file 給file的屬主增加執行權限
$ chmod 751 file 給file的屬主分配讀、寫、執行(7)的權限,給file的所在組分配讀、執行(5)的權限,給其他用戶分配執行(1)的權限
$ chmod u=rwx,g=rx,o=x file 上例的另一種形式
$ chmod =r file 爲所有用戶分配讀權限
$ chmod 444 file 同上例
$ chmod a-wx,a+r file 同上例
$ chmod -R u+r directory 遞歸地給directory目錄下所有文件和子目錄的屬主分配讀的權限
$ chmod 4755 設置用ID,給屬主分配讀、寫和執行權限,給組和其他用戶分配讀、執行的權限。
創建用戶(useradd):
(1)用useradd命令創建用戶創建用戶:
語法: useradd [所要創建的用戶名] ,回車
(2)用passwd命令爲該用戶創建密碼:
語法: passwd [用戶名] ,回車
刪除用戶(userdel命令)
語法:userdel [-r] [要刪除的用戶的名稱]
例如:[root@localhost ~]userdel -r aillo
查看文件中關鍵字所在上下文:
1、或操作
grep -E '123|abc' filename // 找出文件(filename)中包含123或者包含abc的行
egrep '123|abc' filename // 用egrep同樣可以實現
awk '/123|abc/' filename // awk 的實現方式
2、與操作
grep pattern1 files | grep pattern2 //顯示既匹配 pattern1 又匹配 pattern2 的行。
3、其他操作
grep -i pattern files //不區分大小寫地搜索。默認情況區分大小寫,
grep -l pattern files //只列出匹配的文件名,
grep -L pattern files //列出不匹配的文件名,
grep -w pattern files //只匹配整個單詞,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files //匹配的上下文分別顯示[number]行,
多文件字符串替換-linux
sed [-nefri] ‘command’ 輸入文本/文件
如:將當前文件夾下所有包含字符串2,'POINT'
的文本文件均替換爲4,'POINT'
.
可使用命令:
sed -i s/2,\'POINT\'/4,\'POINT\'/g `grep 2,\'POINT\' -rl .`
命令解析:
1. sed ‘s/要替換的字符串/新的字符串/g’ (要替換的字符串可以用正則表達式)
2. -i∶直接修改讀取的文件內容,而不是由屏幕輸出
3. `grep 2,\’POINT\’ -rl .` 執行查詢命令 ,查找滿足條件的文件列表
重複行
方法一:uniq
- 查找非重複行(結果不包含重複行)
sort file |uniq -u
- 查找重複行
sort file |uniq -d
- 統計(結果的第一列爲 該行信息重複次數,然後爲行內容)
sort file | uniq -c
去除重複行
sort file |uniq
以上命令均不對源文件做改動,可通過>
命令指定輸出文件
如:sort test.txt |uniq -u > uniq.txt
- 如要將 1.txt 中 所有 “相鄰” 重複行合併成一行,結果存入 2.txt 使用 :
uniq 1.txt > 2.txt
- 如果是想將相鄰重複行徹底刪掉(而不是合併成一行),可以用
uniq -u 1.txt > 2.txt
- 如要將 1.txt 中 所有 “相鄰” 重複行合併成一行,結果存入 2.txt 使用 :
方法二:Vim
先sort排序,再去重
:sort //直接排序
:g/^\(.*\)$\n\1$/d //去除重複行
:g/\%(^\1$\n\)\@<=\(.*\)$/d //功能同上
:g/\%(^\1\>.*$\n\)\@<=\(\k\+\).*$/d //功能同上
方法三:使用awk
awk '!a[$0]++' file
解析: awk 流程是逐行處理的,默認從文件的第一行一直處理到文件最後一行,還要知道 awk 的基本命令格式是pattern{action}
先匹配各種各樣的模式,然後大括號裏處理如何打印輸出,默認的只要匹配了pattern
就{print $0}
,如果pattern
未命中其判斷值爲假(0)那麼就不會再去處理{action}
了;
舉個最簡單的例子:awk ‘1’ file和awk ‘{print $0}’ file是一個道理,都是從頭到尾依次打印文件的每一行。
a[$0]
這個非常好理解,建立數組a,其變量是文本中的每一行,awk裏$1
是第一列,$2
是第二列,以此類推$NF
是最後一列,而$0
是代表所有列及分隔符,也就是一整行,這樣如果pattern是真的那就打印一整行 ++的意思是 a 數組取變量完畢後,對該數組值 +1。
找個最簡單的文檔來解釋一下:
cat file
1 xxx
2 yyy
3 zzz
4 xxx
5 yyy
6 zzz
7 xxx
8 yyy
9 zzz
則執行命令:
awk '!a[$0]++{print NR,$0}' file
1 xxx
2 yyy
3 zzz
awk 'a[$0]++{print NR,$0}' file
4 xxx
5 yyy
6 zzz
7 xxx
8 yyy
9 zzz
其中 NR
表示行號。
刪除包含text
這個字符串的行 -vim
:g/text/d
統計文件行數 -linux
wc filename
- c
統計字節數。
- l
統計行數。
- w
統計字數。
列塊對應行粘貼 -vim
例如原有數據如下:
Names
Donald Knuth
Sebastian Thrun
Peter Norvig
Satoshi Nakamoto
Age
100
50
60
45
期望結果爲:
Names | Age |
---|---|
Donald Knuth | 100 |
Sebastian Thrun | 50 |
Peter Norvig | 60 |
Satoshi Nakamoto | 45 |
可以理解爲將第二列粘貼到第一列後:
Yank it in visual mode: //在 visual 模式拷貝
- Move cursor to the beginning of Age //將光標移至 Age 的首字母
- Press
Ctrl + v
to enter visual mode //進入VISUAL BLOCK 模式 - Move cursor to 5 in 45 //光標移至下數第五行
- Press
y
to yank (ord
to delete) //按 y 拷貝或 d 刪除 - You have now yanked in visual mode.
Paste (in normal mode) //在 normal 模式粘貼
- Move to the end of the first line and add more spaces because it’s shorter than the second line for example. If you paste a “block” without adding extra spaces, it will overwrite the “run” in Sebastian Thrun. //光標移至首行,並在行尾添加空格使之與下面對齊。
- Now you’re on the first line, insert a few spaces after the last character. Make sure you’re not in insert mode and hit
p
to paste the block. (If you want to paste in insert mode, use ctrl+r “)//按 p 粘貼即可。
沒看懂^_^,沒關係,上圖:
vim 與系統剪切板的互動
"+y
複製當前行到系統剪切板
"+p
粘貼系統剪切板內容到當前位置後
/**************************************************/
參考文章
Linux常用文本操作命令整理
查看linux系統信息
一、查看Linux內核版本命令(兩種方法):
1、cat /proc/version
[root@localhost ~]# cat /proc/version
Linux version 2.6.18-194.8.1.el5.centos.plus ([email protected]) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-48)) #1 SMP Wed Jul 7 11:50:45 EDT 2010
2、uname -a
[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.18-194.8.1.el5.centos.plus #1 SMP Wed Jul 7 11:50:45 EDT 2010 i686 i686 i386 GNU/Linux
二、查看Linux系統版本的命令(3種方法):
1、lsb_release -a,即可列出所有版本信息:
[root@localhost ~]# lsb_release -a
LSB Version: :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch
Distributor ID: CentOS
Description: CentOS release 5.5 (Final)
Release: 5.5
Codename: Final
這個命令適用於所有的Linux發行版,包括Redhat、SuSE、Debian…等發行版。
2、cat /etc/redhat-release,這種方法只適合Redhat系的Linux:
[root@localhost ~]# cat /etc/redhat-release
CentOS release 5.5 (Final)
3、cat /etc/issue,此命令也適用於所有的Linux發行版。
[root@localhost ~]# cat /etc/issue
CentOS release 5.5 (Final)
Kernel \r on an \m