linux文本處理命令

基礎學習——linux文本處理命令

sed、grep、find、xargshtml

sed

1. 替換文件內容
sed -i "s/test01/test02/g" `grep -rl test01 /home/forum`

說明:在/home/forum目錄下,grep出含有test01字符串的文件,而後把test01替換成test02linux

2. sed替換換行符

參考:http://my.oschina.net/shelllife/blog/118337shell

sed命令從文本流中讀取一行命令到模式空間進行相應處理,所以在處理換行時,有些特殊。svn

echo "a,b,c,d" | sed 's/,/\n/g' #將字符串a,b,c,d中的逗號替換成換行符
echo "a,b,c,d" | sed 's/,/\n/g' | sed 's/\n/,/g' # 後面這個sed沒有生效

說明:sed讀取一行時,會先把換行符去掉,命令處理完後,再加上。因此沒法使用上面這個命令(sed 's/\n/,/g')進行換行符替換。學習

使用下面的命令,能夠將換行符進行替換:.net

sed ':label;N;s/\n/,/;b label' filename
sed ':label;N;s/\n/,/;t label' filename

說明:該命令能夠實現將文本中的全部換行進行替換,上面例子中,將換行替換成逗號。
:label; 這是一個標籤,用來實現跳轉處理,名字能夠隨便取(label),後面的b label就是跳轉指令
N; N是sed的一個處理命令,追加文本流中的下一行到模式空間進行合併處理,所以是換行符可見
s/\n/:/; s是sed的替換命令,將換行符替換爲冒號
b label 或者 t label b 或t 是sed的跳轉命令,跳轉到指定的標籤處code

實際應用eg:htm

echo "a,b,c,d" | sed 's/,/\n/g' | sed ':x;N;s/\n/,/g;b x' 
#後面這個sed能夠將換行替換成','

grep

1. grep 參數
-l 表示只輸出包含匹配字符的文件名

find

1, 排除查找某類文件
find . ! -name "*.svn-base" | xargs grep g6y8LQV9ZJgj --col

說明: 找出當前目錄中後綴名不爲.svn-base的文件,而後從這些文件中查找含有字符串g6y8LQV9ZJgj 的文件。blog

2.按指定目錄深度查找
find . -maxdepth 1 -name '*' #只在當前目錄查找
find . -naxdepth 1 type f #查找當前目錄中的文件

說明:maxdepth後面的參數值,表示距當前目錄指定的深度,1表示當前目錄,2表示一級子目錄,以此類推。若是沒有指定maxdepth參數,find會查找當前目錄及其全部子目錄下的文件。字符串

xargs

該命令主要功能是:從輸入中構建和執行shell命令。
xargs默認以空白字符 (空格, TAB, 換行符) 來分割記錄

1. 與find命令結合
find -name '*.log' | xargs rm #找到當前目錄及其子目錄中的.log文件,而後刪除
find -name '*.log' -print0 | xargs -0 rm #做用同上

說明:-print0 表示 find命令在打印出一個文件名以後接着輸出一個 NULL 字符 ('') 而不是換行符, 而後再告訴 xargs 也用 NULL 字符來做爲記錄的分隔符

2. xargs -i 參數
find . -name '*.bak' | xargs -i cp {} ../  #find找到後綴爲.bak的文件,而後將這些文件cp到上一層目錄

說明:xargs後面加上-i參數,直接用{}代替管道以前的標準輸出的內容。

參考:

http://www.cnblogs.com/mchina/archive/2012/07/02/2573313.html

相關文章
相關標籤/搜索