bash珍しい使い方

7312 ワード

manbashによってbashの特殊な使い方が見えます
1.${BASH_SOURCE-$0}  
スクリプト名の取得
2. ${parameter:-default}
SLAVE_FILE=${HADOOP_SLAVES:-${HADOOP_CONF_DIR}/slaves}デフォルト値の指定
3. ${parameter/pattern/string/}
${@///\\}
sedコマンドの使用方法:
sedプログラムには2つのバッファがあります:pattern spaceとhold space
how sed works
sed maintains two data buffers: the active pattern space, and the auxiliary hold space. Both are initially empty.
sed operates by performing the following cycle on each line of input: first, sed reads one line from the input stream, removes any trailing newline, and places it in the pattern space. Then commands are executed; each command can have an address associated to it: addresses are a kind of condition code, and a command is only executed if the condition is verified before the command is to be executed.
When the end of the script is reached, unless the -n option is in use, the contents of pattern space are printed out to the output stream, adding back the trailing newline if it was removed.Then the next cycle starts for the next input line.
1. Sedの概要
sedは、1行のコンテンツを一度に処理するオンラインエディタです.処理時には、現在処理されている行を一時バッファに格納して「パターン空間」(pattern space)と呼び、次にバッファ内の内容をsedコマンドで処理し、処理が完了するとバッファの内容を画面に送る.次に、ファイルの最後まで次の行を処理します.リダイレクトストレージ出力を使用しない限り、ファイルの内容は変更されません.Sedは主に1つ以上のファイルを自動的に編集するために使用されます.ファイルの繰り返し操作を簡素化する.変換プログラムなどを作成します.以下、GnuバージョンのSed 3.02について説明します.
2.アドレッシング
編集したい行は、カンマで区切られた2つの行数で2つの行が始まる範囲(行数で表される2つの行を含む)を表す数値で構成されたアドレスで位置決めできます.1,3は1,2,3行、ドル記号($)は最後の行を表す.範囲は、データ、正規表現、または両方を組み合わせて決定できます.
3.Sedコマンド
sedコマンドを呼び出すには、次の2つの形式があります.
*
sed [options] 'command' file(s)
*
sed [options] -f scriptfile file(s)
a\
現在の行の後ろにテキストを1行追加します.
b lable
スクリプトにタグが付いた場所にブランチし、ブランチが存在しない場合はスクリプトの末尾にブランチします.
c\
新しいテキストでローのテキストを変更します.
d
テンプレートブロックの場所から行を削除します.
D
テンプレートブロックの最初の行を削除します.
i\
現在の行にテキストを挿入します.
h
テンプレートブロックの内容をメモリのバッファにコピーします.
H
モジュールプレートの内容をメモリのバッファに追加
g
メモリバッファの内容を取得し、現在のテンプレートブロックのテキストに置き換えます.
G
メモリバッファの内容を取得し、現在のテンプレートブロックテキストの後ろに追加します.
l
リストは文字のリストを印刷できません.
n
次の入力行を読み込み、最初のコマンドではなく次のコマンドで新しい行を処理します.
N
次の入力行をモジュールプレートの後ろに追加し、両者の間に新しい行を埋め込み、現在の行番号を変更します.
p
テンプレートブロックの行を印刷します.
P(大文字)
テンプレートブロックの最初の行を印刷します.
q
Sedを終了します.
r file
fileから行を読みます.
t label
ifブランチは、最後の行から、条件が満たされるとT,tコマンドに分岐し、ラベル付きコマンドに分岐したり、スクリプトの最後に分岐したりします.
T label
エラーブランチは、最後の行から始まり、エラーやT、tコマンドが発生すると、ラベル付きのコマンドにブランチしたり、スクリプトの最後にブランチしたりします.
w file
テンプレートプレートをfileの末尾に書き、追加します.
W file
モジュールプレートの最初の行をfileの最後に書き、追加します.
!
選択されていないすべてのローに対して、後のコマンドが機能することを示します.
s/re/string
正規表現reをstringで置き換えます.
=
現在の行番号を印刷します.
#
コメントを次の改行文字の前に拡張します.
以下は置換タグです
*
gは行内全面置換を示す.
*
pは印刷行を示す.
*
wは行を1つのファイルに書き込むことを示す.
*
xは、交換モジュールプレート内のテキストとバッファ内のテキストを表す.
*
yは、1つの文字を別の文字に翻訳することを表す(ただし、正規表現では使用されない)
4.オプション
-e command, --expression=command
複数台の編集を許可します.
-h, --help
ヘルプを印刷し、バグリストのアドレスを表示します.
-n, --quiet, --silent
デフォルト出力をキャンセルします.
-f, --filer=script-file
ブートsedスクリプトファイル名.
-V, --version
バージョンと著作権情報を印刷します.
5.メタ文字セット^
アンカー行の開始は、/^sed/sedで始まるすべての行に一致します. 
$
アンカー行の終了例:/sed$/sedで終わるすべての行に一致します. 
.
改行しない文字を一致させるには、/s.d/sに一致した後に任意の文字をつなぎ、dになります. 
*
0または複数の文字を一致させます.たとえば、/*sed/すべてのテンプレートに一致するのは、1つまたは複数のスペースの直後にsedの行です. 
[]
/[Ss]ed/一致sedおよびSedなどの指定範囲内の文字を一致させます. 
[^]
指定された範囲外の文字を一致させます.たとえば、/[^A-RT-Z]ed/一致には、A-RとT-Zのアルファベットの先頭が含まれず、edの行に続いています. 
\(..\)
s/(love)able/1 rsなどの一致する文字を保存し、loveableをloversに置き換えます. 
&
検索文字を保存して、s/love/*&**/、loveという他の文字を置換します. 
\<
アンカーされた単語の開始例:/\>
アンカーされた単語の終わり、たとえば/love>/は、loveで終わる単語を含む行に一致します. 
x\{m\}
反復文字x,m回,例えば:/0{5}/マッチングは5つのoを含む行である. 
x\{m,\}
繰り返し文字xは、少なくともm回、例えば、/o{5,}/少なくとも5つのoの行に一致する. 
x\{m,n\}
繰り返し文字xは、少なくともm回、例えば/o{5,10}/5~10個のoの行に一致するn回未満である.
6.例
削除:dコマンド
*
$sed'2 d'example---exampleファイルの2行目を削除します.
*
$sed'2,$d'example---exampleファイルの2行目から末尾のすべての行を削除します.
*
$sed'$d'example---exampleファイルの最後の行を削除します.
*
$sed'/test/'d example---exampleファイルのtestを含むすべての行を削除します.
置換ちかん:sコマンドsこまんど
*
$sed's/test/mytest/g'example---行全体でtestをmytestに置き換えます.gタグがない場合、行ごとに最初に一致するtestのみがmytestに置き換えられます.
*
$sed-n's/^test/mytest/p'example-----(-n)オプションは、pフラグとともに使用され、置換された行のみが印刷されることを示します.すなわち、ある行の先頭のtestがmytestに置き換えられると、印刷されます.
*
$sed's/^192.168.0.1/&localhost/'example----&記号は、置換文字列で見つかった部分を表します.192.168.0.1で始まるすべての行は、192.168.0.1 localhostから192.168.0.1 localhostに置き換えられます.
*
$sed-n's/(love)able/1 rs/p'example---loveは1とマークされ、すべてのloveableがloversに置き換えられ、置き換えられた行が印刷されます.
*
$sed's#10#100#g'example-----どんな文字でも、sコマンドに続くものは新しい区切り文字とされているので、デフォルトの"/"の代わりに「#」はここで区切り文字となります.すべての10を100に置き換える.
選択した行の範囲:カンマ
*
$sed-n'/test/,/check/p'example---テンプレートtestとcheckが決定した範囲内のすべての行が印刷されます.
*
$sed-n'5,/^test/p'example---5行目からtestで始まる行を含む最初の行までのすべての行を印刷します.
*
$sed'/test/,/check/s/$/sed test/'example---テンプレートtestとwestの間の行について、各行の末尾を文字列sed testで置き換えます.
マルチポイント編集:eコマンド
*
$sed-e'1,5 d'-e's/test/check/'example-----(-e)オプションを使用すると、同じ行で複数のコマンドを実行できます.例に示すように、1番目のコマンドは1~5行削除され、2番目のコマンドはtestをcheckで置き換えます.コマンドの実行順序は結果に影響します.両方のコマンドが置換コマンドである場合、最初の置換コマンドは2番目の置換コマンドの結果に影響します.
*
$sed--expression='s/test/check/'--expression='/love/d'example----eよりも良いコマンドは--expressionです.sed式に値を割り当てることができます.
ファイルから読み込み:rコマンド
*
$sed'/test/r file'example---fileの内容が読み込まれ、testに一致する行の後ろに表示され、複数の行に一致すると、fileの内容がすべての一致行の下に表示されます.
書き込みファイル:wコマンド
*
$sed-n'/test/w file'example---exampleにtestを含むすべての行がfileに書き込まれます.
追加コマンド:aコマンド
*
$sed'/^test/a----->this is a example'example挿入:iコマンド
$ sed '/test/i\\
new line
-------------------------' example
testが一致すると、反スラッシュの後ろのテキストが一致する行の前に挿入されます.
次:nコマンド
*
$ sed '/test/{ n; s/aa/bb/; }' example---testが一致すると、一致する行の次の行に移動し、その行のaaを置き換えてbbになり、その行を印刷して続行します.
変形へんけい:yコマンドyこまんど
*
$sed'1,10 y/abcde/BCDE/'example---1-10行のabcdeをすべて大文字に変更します.正規表現メタ文字ではこのコマンドは使用できません.
終了:qコマンド
*
$sed'10 q'example---10行目を印刷した後、sedを終了します.
保持と取得:hコマンドとGコマンド
*
$sed-e'/test/h'-e'$G example---sedがファイルを処理するとき、各行はモード空間という一時バッファに保存され、行が削除されたり出力がキャンセルされたりしない限り、処理された行はすべて画面に印刷されます.次に、モード空間が空になり、新しいロー待機処理が格納される.この例では、マッチングtestの行が見つかった後、モード空間に格納され、hコマンドは、キャッシュ領域を保持するという特殊なバッファ内にコピーされ格納される.2番目の文は、最後の行に達した後、Gコマンドがバッファを保持する行を取り出し、モード空間に戻し、現在すでにモード空間に存在する行の末尾に追加することを意味する.この例では最後の行に追加します.簡単に言えば、testを含む行はすべてコピーされ、ファイルの末尾に追加されます.
保持と交換:hコマンドとxコマンド
*
$sed-e'/test/h'-e'/check/x'example---モード空間を交換し、バッファの内容を保持します.すなわちtestとcheckを含む行を交換する.
7.スクリプト
Sedスクリプトはsedのコマンドリストで、Sedを起動すると-fオプションでスクリプトファイル名を起動します.Sedは、スクリプトに入力されたコマンドに非常に文句を言います.コマンドの最後に空白やテキストは使用できません.1行に複数のコマンドがある場合は、セミコロンで区切ります.#で始まる行はコメントされ、行をまたぐことはできません.
変換元:http://www.iteye.com/topic/587673