Linux sed命令の詳細
転載元:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html#3495425
1.概要
sedはオンラインエディタで、行の内容を一度に処理します.処理時には、現在処理されている行を一時バッファに格納し、「モード空間」と呼び、モード空間の内容をsedコマンドで処理し、処理が完了したら、バッファの内容を画面に送ります.次の行を処理して、ファイルの最後まで繰り返します.ファイルの内容は変わっていません.これらは全部モード空間で処理されています.Sedは、1つ以上のファイルを自動的に編集するために使用できます.
2.sed使用パラメータ
3.1新規行
etc/passwdの2行目に『drink tea?』を付けます!
etc/passwdの内容を並べて行番号を印刷します.また、2~5行目を削除してください.
リスト/etc/passwdファイル内の5-7行目のみ
2行目の内容を『No 2-5 number』に置き換えますか?
4.1マッチする行を探して表示する
検索/etc/passwdはrootキーワードの行があります.
文法はこのように似ています
マシンのipアドレスを取得するには、以下のコマンドが使用できます.
4.4マッチした行を探してコマンドを実行する
検索/etc/passwd、rootに対応する行を見つけて、後ろの括弧の中の命令群を実行して、各コマンドの間にセミコロンで区切ります.ここでbashをblueshellに変えて、この行を出力します.
一つのsedコマンドは、/etc/passwdの3行目から末尾までのデータを削除し、bashをblueshellに置き換えます.複数のsed名を実行するのに相当します.
6危険動作
上記の操作は元のファイルの内容を変えません.上の操作は全部モード空間で行われるからです.
sedはファイルの内容を直接修正することができます.バンド-iパラメータが必要です.
sedを利用してレグラーを_express.txt内の各行が終わると.に換える!
sedの『-i』のオプションはファイルの内容を直接変更することができます.この機能は非常に役立ちます.例えば、100万行のファイルがあれば、100行目に何かの文字を追加したいです.ここでvimを使うと狂ってしまうかもしれません.ファイルが大きすぎるからです.どうすればいいですか?sedを利用しますsedを通して直接に機能を修正します.また、vimを使って修正する必要もありません.
1.概要
sedはオンラインエディタで、行の内容を一度に処理します.処理時には、現在処理されている行を一時バッファに格納し、「モード空間」と呼び、モード空間の内容をsedコマンドで処理し、処理が完了したら、バッファの内容を画面に送ります.次の行を処理して、ファイルの最後まで繰り返します.ファイルの内容は変わっていません.これらは全部モード空間で処理されています.Sedは、1つ以上のファイルを自動的に編集するために使用できます.
2.sed使用パラメータ
[root@www ~]# sed [-nefr] [ ]
:
-n : (silent) 。 sed , STDIN 。 -n , sed ( ) 。
-e : , -e ;
-f : sed , -f filename filename sed ;
-r :sed 。( )
-i : , 。
: [n1[,n2]]function
n1, n2 : , 『 』, , 10 20 , 『 10,20[ ] 』
function:
a : , a , ( )~
c : , c , n1,n2 !
d : , , d ;
i : , i , ( );
p : , 。 p sed -n ~
s : , ! s ! 1,20s/old/new/g !
3.指定された行を処理する3.1新規行
etc/passwdの2行目に『drink tea?』を付けます!
nl /etc/passwd | sed '2a drink tea'
2行目の前に『drink tea?』を付けます! nl /etc/passwd | sed '2i drink tea'
2行以上追加する場合は、2行目の後ろに2行のワードを追加します.例えば『Drink tea or…』と『drink beer?』です.各行の間に、バックスラッシュ(\)で新しい行を追加しなければなりません.nl /etc/passwd | sed '2a Drink tea or ......\
> drink beer ?'
3.2行の削除etc/passwdの内容を並べて行番号を印刷します.また、2~5行目を削除してください.
nl /etc/passwd | sed '2,5d'
2行目を削除するだけでnl /etc/passwd | sed '2d'
3番目の行から最後の行まで削除します.nl /etc/passwd | sed '3,$d'
3.3行を表示するリスト/etc/passwdファイル内の5-7行目のみ
nl /etc/passwd | sed -n '5,7p'
3.4换行2行目の内容を『No 2-5 number』に置き換えますか?
nl /etc/passwd | sed '2,5c No 2-5 number'
4.マッチングした行を処理する4.1マッチする行を探して表示する
検索/etc/passwdはrootキーワードの行があります.
nl /etc/passwd | sed -n '/root/p'
1
4.2マッチする行を探して削除するnl /etc/passwd | sed -n '/root/d'
1
4.3マッチする行を探して、サブストリングを置換する文法はこのように似ています
sed 's/ / /g'
新しい文字列が空の場合、代わりの部分列が削除されるのと同じ機能です.マシンのipアドレスを取得するには、以下のコマンドが使用できます.
/sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
1
二つのsedコマンドは、ipアドレスの前と後ろのサブストリングを削除します.4.4マッチした行を探してコマンドを実行する
検索/etc/passwd、rootに対応する行を見つけて、後ろの括弧の中の命令群を実行して、各コマンドの間にセミコロンで区切ります.ここでbashをblueshellに変えて、この行を出力します.
nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p}'
1
もし/etc/passwdの最初のbashのキーワードだけを置き換えれば、blueshellは終了します.nl /etc/passwd | sed -n '/bash/{s/bash/blueshell/;p;q}'
1
5多点編集一つのsedコマンドは、/etc/passwdの3行目から末尾までのデータを削除し、bashをblueshellに置き換えます.複数のsed名を実行するのに相当します.
nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
1
-eは多点編集、第一編集コマンド削除/etc/passwd第三行から末尾までのデータを示し、第二条コマンド検索bashはblueshellに置き換えられます.6危険動作
上記の操作は元のファイルの内容を変えません.上の操作は全部モード空間で行われるからです.
sedはファイルの内容を直接修正することができます.バンド-iパラメータが必要です.
sedを利用してレグラーを_express.txt内の各行が終わると.に換える!
sed -i 's/\.$/\!/g' regular_express.txt
1
sedを利用して直接reglar_にいます.express.txt最後の一行は『啝This a test』に参加します.sed -i '$a # This is a test' regular_express.txt
1
$は最後の行を表していますが、aの動作は新しくなりましたので、このファイルは最後に『驫This a test』を追加しました.sedの『-i』のオプションはファイルの内容を直接変更することができます.この機能は非常に役立ちます.例えば、100万行のファイルがあれば、100行目に何かの文字を追加したいです.ここでvimを使うと狂ってしまうかもしれません.ファイルが大きすぎるからです.どうすればいいですか?sedを利用しますsedを通して直接に機能を修正します.また、vimを使って修正する必要もありません.