sedコマンド(テキスト中の文字列を置換する)
- 〈このページの構成〉
形式
sed[-a][-E][-n][-r][-u]コマンド[入力ファイルパス名...] sed[-a][-E][-n][-r][-u][-e コマンド]...[-f スクリプトファイルパス名]...[入力ファイルパス名...]
機能
ファイルや標準入力のテキストの文字列を置換して標準出力に出力します。
引数
- -a
-
編集コマンドの解析エラーが発生した場合に,ファイルが作成されないようにしたり,既存ファイルが空にならないようにしたりするときに指定します。wコマンドまたはsコマンドのwフラグで指定するパターンスペース出力ファイルの作成方法を定義します。パターンスペース出力ファイルは,wコマンド,またはwフラグ指定のsコマンドが適用されるときに作成されます。-aオプションを指定しない場合は,wコマンド,またはsコマンドのwフラグ解析時にパターンスペース出力ファイルを作成します。
- -E|-r
-
コマンドで指定するパターンを,拡張した正規表現として扱います。どちらのオプションを指定しても同じように実行されます。
- -n
-
標準出力へのパターンスペースの出力を抑止します。pコマンドまたはPコマンドによる出力以外はパターンスペースの標準出力への出力は行いません。
- -u
-
Windowsの場合,標準出力への実行結果出力時のバッファリングを抑止します。
UNIXの場合,標準出力への実行結果出力時のバッファリングをレコード単位にします。
- コマンド|-e コマンド
-
入力ファイルを編集するコマンドを指定します。-eオプションは複数指定できます。-eオプションを複数指定する場合,コマンドの実行順序は指定された順番です。-fオプションを指定しない場合は,-eオプションの指定を省略できます。
- -f スクリプトファイルパス名
-
スクリプトファイルのパス名を指定します。スクリプトファイルには,入力ファイルのレコードを編集する編集コマンドを記述します。-fオプションは複数指定できます。-fオプションを複数指定する場合,または-eオプションと組み合わせて指定する場合,コマンドの実行順序は指定された順番です。
- 入力ファイルパス名
-
編集する入力ファイルのパス名を指定します。複数指定できます。パス名を指定しない場合は,標準入力から入力します。ファイルを複数指定した場合,処理中のファイルが終端に到達したときに次のファイルをオープンしてレコードを入力します。
編集コマンドの記述形式
入力ファイルを編集する編集コマンドの記述形式を次に示します。
[address[,address]]command[arguments]
addressには,編集対象のレコードを特定するためのアドレス(レコードの行番号,または検索パターン文字列)を指定します。
commandには,入力レコードに適用する編集コマンドを指定します。
argumentsには,編集コマンドに渡す引数を指定します。
入力ファイルから1レコードを入力するたびにアドレスで指定したレコードの行番号,または検索パターン文字列と比較し,一致した場合に編集コマンドが実行されます。アドレスを省略した場合はすべてのレコードが編集の対象となります。編集コマンドの実行結果は標準出力に出力されます。
アドレス
入力ファイル内の編集対象となるレコードを特定するためのアドレスです。
-
行番号
入力ファイルの先頭レコードを1とした行番号を指定します。最終レコードは「$」を使うこともできます。複数の入力ファイルを指定した場合は通し番号になります。なお,行番号(アドレス範囲指定時は開始行番号)に0を指定した場合,編集コマンドは入力レコードに適用されません。
-
検索パターン文字列
レコード内の文字列に一致させる検索パターン文字列を「/」で囲んで指定します。検索パターン文字列には正規表現が指定できます。指定例を次に示します。
/abc/w file
検索パターン文字列を囲む「/」は,「\」と改行文字以外のすべての1バイト文字のどれかに変更できます。「/」以外の文字を区切り文字として使用する場合は,先頭の区切り文字の前に「\」を記述します。
指定例を次に示します。検索パターン文字列を囲む「/」を「#」に変更して指定します。
\#abc#w file
-
アドレス範囲指定
「address,address」を指定することで編集対象となるレコードの範囲が指定できます。1番目のaddressに一致するレコードから,2番目のaddressに一致するレコードまでが編集コマンドの実行範囲となります。
範囲は,次のように指定できます。
-
2つの行番号による範囲
-
2つの検索パターン文字列による範囲
-
行番号と検索パターン文字列の組み合わせによる範囲
2つの行番号による範囲の指定例を次に示します。
5,20w outfile
1番目のaddressで指定した行番号のレコードから,2番目のaddressに指定した行番号のレコードまでが編集コマンドの実行範囲となります。
なお,1番目のaddressで指定した行番号が2番目のaddressで指定した行番号より大きい場合(1番目のaddress>2番目のaddress),1番目のaddressで指定した行番号のレコードだけが編集コマンドの実行対象となります。
2つの検索パターン文字列による範囲の指定例を次に示します。
/abc/,/xyz/w file
1番目のaddressの検索パターン文字列に一致するレコードから,2番目のaddressの検索パターン文字列に一致するレコードまでが編集コマンドの実行範囲となります。
なお,2番目のaddressで指定した検索パターン文字列を含むレコードがなく入力ファイルの終端に達した場合は,入力ファイルの最終行までが範囲となります。ただし,複数の入力ファイルを指定した場合,次の入力ファイルで2番目のaddressで指定した検索パターン文字列に一致するレコードを検索します。
1番目のaddressが検索パターン文字列で2番目のaddressが行番号の場合,検索パターンに一致したレコードの行番号が2番目のaddressの行番号より大きい場合(1番目のaddress>2番目のaddress),検索パターンに一致したレコードだけが編集コマンドの実行対象となります。
-
パターンスペースとホールドスペース
sedコマンドにはパターンスペース,ホールドスペースと呼ばれるテキスト編集用の作業領域があります。
パターンスペースには入力ファイルから入力したレコードが格納されます。
パターンスペースは,次に示すsedコマンドの処理の流れで使用されます。
-
入力ファイルから改行コードで分割された1レコードを入力します。
Windowsでは,[CR]+[LF]または[LF]です。UNIXでは,[LF]だけです。UNIXの場合,入力ファイルの改行コードが[CR]+[LF]のときは,パターンスペースに[CR]が格納されます。
-
入力レコードの内容をパターンスペースにコピーします。
-
パターンスペースがアドレスで指定した行番号,またはパターンスペースの内容に検索パターン文字列が一致する場合に編集コマンドを実行します。
実行するコマンドがDコマンドの場合に,Dコマンド実行後にパターンスペースの内容が残っているときは,手順1と手順2は処理されません。
-
パターンスペースの内容を標準出力に出力します。
ただし,-nオプションが指定されている場合は処理されません。
-
パターンスペースの内容を消去します。
ホールドスペースはパターンスペースの内容を退避したり,ホールドスペースの内容をパターンスペースに戻したりする一時的な作業領域として使用できます。
編集コマンド
sedコマンドで使用できる編集コマンドを次に示します。
- [address[,address]]{command-list}
-
入力レコードに適用する複数の編集コマンドをグループ化します。各編集コマンドは改行または;(セミコロン)で区切ります。なお,最後に記述した編集コマンドと同じ行に「}」を記述する場合は,コマンド名の後ろに「;」を記述する必要があります。
[address]a\(改行)
- text
-
次の入力レコードを読み込む前にtextに記述したテキストを標準出力に出力します。複数レコードを出力する場合は,改行の直前に「\」を記述します。
指定例を次に示します。次の入力レコードを読み込む前に2レコードを標準出力に出力します。
a\(改行) テキスト1\(改行) テキスト2
- [address[,address]]b[label]
-
指定したラベルlabelが定義されている「:label」コマンドに分岐します。labelの指定を省略した場合は,スクリプト記述の末尾に分岐します。
[address[,address]]c\(改行)
- text
-
パターンスペースの内容を削除します。アドレス未指定または1個のアドレスが指定されている場合は,textに記述したテキストを標準出力に出力します。アドレス2個指定の場合は,選択された範囲の最終レコードを処理したあとにtextに記述したテキストを標準出力に出力します。複数レコードを出力する場合は,改行の直前に「\」を記述します。
また,cコマンドの後ろに記述されているコマンドは実行されないで,次の入力レコードを読み込んで先頭のコマンドから実行が開始されます。
- [address[,address]]d
-
パターンスペースの内容を削除します。削除するパターンスペースの内容は標準出力には出力されません。また,dコマンドの後ろに記述されているコマンドは実行されないで,次の入力レコードを読み込んで先頭のコマンドから実行が開始されます。
- [address[,address]]D
-
パターンスペースに複数レコードが格納されている場合に,最初の改行までを削除します。パターンスペースの内容は標準出力には出力されません。また,Dコマンドの後ろに記述されているコマンドは実行されないで,先頭のコマンドから実行が開始されます。
Dコマンドを実行した結果,パターンスペースの内容がなくなった場合は,次の入力レコードを読み込んで先頭のコマンドから実行が開始されます。
- [address[,address]]g
-
ホールドスペースの内容をパターンスペースにコピーします。コピー前のパターンスペースの内容は破棄されます。
- [address[,address]]G
-
ホールドスペースの内容をパターンスペースに追加します。追加前にパターンスペースに格納されているレコードとは改行文字で区切られます。
- [address[,address]]h
-
パターンスペースの内容をホールドスペースにコピーします。コピー前のホールドスペースの内容は破棄されます。
- [address[,address]]H
-
パターンスペースの内容をホールドスペースに追加します。追加前にホールドスペースに格納されているレコードとは改行文字で区切られます。
[address]i\(改行)
- text
-
現在の入力レコードをパターンスペースに格納する前にtextに記述したテキストを標準出力に出力します。複数レコードを出力する場合は,改行の直前に「\」を記述します。
- [address[,address]]l
-
パターンスペースの内容を標準出力に出力します。1バイト文字(0x20〜0x7eの範囲),スペースおよびマルチバイト文字以外のデータは,各バイトごとに「\」に続いて3桁の8進数で出力します。また,「\」は「\\」として出力され,次の表に示す制御コードはエスケープ文字として出力されます。
制御コード
出力されるエスケープ文字
アラート文字(ベル)
\a
バックスペース文字
\b
フォームフィード文字(改ページ)
\f
改行文字。なお,行(複数行の場合は最終行)の終端の改行文字は出力されません。
\n
復帰文字
\r
タブ文字
\t
垂直タブ文字
\v
1レコードの出力幅は,次の優先順位で値が決まります。
-
環境変数COLUMNSの値
-
コンソールへの出力の場合はコンソール画面の幅
-
半角文字で60文字
各レコードの終わりには$記号が出力されます。なお,1レコードが出力幅を超える場合は折り返して出力されます。折り返し部分には「\」が出力されます。
なお,環境変数COLUMNSはJP1/Advanced Shellのジョブ定義スクリプト内に定義できません。
-
- [address[,address]]n
-
入力ファイルから次の入力レコードを読み込んでパターンスペースに格納し,現在の内容を標準出力に出力します。現在の行番号には1が加算されます。-nオプション指定時は,パターンスペースの現在の内容は標準出力に出力されません。
- [address[,address]]N
-
入力ファイルから次の入力レコードを読み込んでパターンスペースに追加します。追加前にパターンスペースに格納されているレコードとは改行文字で区切られます。現在の行番号には1が加算されます。
- [address[,address]]p
-
パターンスペースの内容を標準出力に出力します。
- [address[,address]]P
-
パターンスペースに複数レコードが格納されている場合に,最初の改行までの内容を出力します。パターンスペースに1レコードしか格納されていない場合はpコマンドの場合と同じです。
- [address]q
-
スクリプトの処理を終了します。この記述以降はコマンドの実行および入力レコードの入力はしません。-nオプションが指定されていない場合,終了時にパターンスペースの内容を標準出力に出力します。また,aまたはrコマンドで追加されたレコードがあるときはそのレコードが出力されます。
- [address]r パス名
-
次の入力レコードの入力前にパス名で指定したファイルの内容を標準出力に出力します。パス名で指定したファイルの入力でエラーが発生しても無視されます。
Windowsの場合,ファイル中の改行コードは[CR]+[LF]で出力されます。
UNIXの場合,ファイル中の改行コードをそのまま出力します。
- [address[,address]]s/pattern/replacement/flags
-
パターンスペース内のパターンpatternに最初に一致する文字列を置き換え文字列replacementに置き換えます。「s」,patternおよびreplacementの区切り文字である「/」を,「\」と改行文字以外のすべての1バイト文字のどれかに変更できます。区切り文字をpattern,replacementの文字に含めたい場合は,pattern,replacement内の区切り文字の前に「\」を記述します。
パターンには正規表現が指定できます。
また,置き換え文字列replacementには次の文字が指定できます。
-
「&」を指定した場合は,「&」がパターンに一致した文字列に置き換わります。「&」を置き換える文字として扱いたい場合は「&」の前に「\」を記述します。
-
「\N」(N:1〜9の数字)を指定した場合は,「\N」がパターンの()(丸括弧)で囲まれたタグ付き正規表現に一致する文字列に置き換わります。「\」の後ろの数字はパターン中のタグ付き正規表現文字列の順番を示します。
-
改行を含める場合は改行の直前に「\」を記述します。
flagsに指定できるフラグには次の値があります。なお,フラグは省略でき,また1個以上指定できます。
- N
-
パターンスペースでN回目に一致したパターンだけを置き換えます。
- g
-
パターンスペースの最初にパターンに一致した文字列の置き換えだけでなく,パターンスペース内のパターンに一致したすべての文字列を置き換えます。
- p
-
置き換えを実行した場合,置き換え後のパターンスペースの内容を標準出力に出力します。
- w パス名
-
置き換えを実行した場合,置き換え後のパターンスペースの内容をパス名で指定したファイルに追加します。指定したファイルがある場合は,次のようになります。
-
-aオプションを指定しないとき
置き換えの有無に関係なくsedコマンド実行前の内容は破棄されます。
-
-aオプションを指定するとき
置き換えが実行されるとsedコマンド実行前の内容は破棄されます。
Windowsの場合,ファイルに出力される改行コードは[CR]+[LF]で出力されます。
-
-
- [address[,address]]t[label]
-
入力レコードが読み込まれてから,または直前に実行されたtコマンド以降でsコマンドによる置き換えが行われた場合に,指定したラベルlabelが定義されている:(コロン)コマンドに分岐します。labelの指定を省略した場合は,スクリプト記述の末尾に分岐します。
- [address[,address]]w パス名
-
パターンスペースの内容をパス名で指定したファイルに追加します。指定したファイルがある場合は,次のようになります。
-
-aオプションを指定しないとき
アドレスaddressが一致しているかどうかに関係なくsedコマンド実行前の内容は破棄されます。
-
-aオプションを指定するとき
アドレスaddressに一致するとsedコマンド実行前の内容は破棄されます。
Windowsの場合,ファイルに出力される改行コードは[CR]+[LF]で出力されます。
-
- [address[,address]]x
-
パターンスペースの内容とホールドスペースの内容を交換します。
- [address[,address]]y/string1/string2/
-
パターンスペースの内容に対して,文字列string1に指定した文字ごとに検索と置き換えを行います。置き換える文字は,文字列string1の各文字に対応する位置にある文字列string2中の文字で置き換えます。
string1とstring2の文字数は同じにする必要があります。
string1またはstring2に改行文字を指定する場合は\nを指定します。「y」,string1およびstring2の区切り文字である「/」を,「\」と改行文字以外のすべての1バイト文字のどれかに変更できます。
- [address[,address]]!commandまたは[address[,address]]!{command-list}
-
コマンドまたは,グループ化したコマンド群をアドレスaddressで選択されないレコードに適用します。
- :label
-
bおよびtコマンドに指定した分岐先のラベルを定義します。:(コロン)コマンド自体は処理をしません。
- [address]=
-
現在の行番号を1レコードとして標準出力に出力します。
- (空行)
-
空行は無視されます。
- #
-
#以降はコメントとして扱われます。なお,スクリプトファイルの先頭レコードの1カラム目に「#n」を記述した場合は,-nオプションを指定した場合の動作となります。
エスケープ文字
アドレスの検索パターン,aコマンドのテキスト,cコマンドのテキスト,iコマンドのテキスト,sコマンドのパターンと置き換え文字列,およびyコマンドの検索文字と置き換え文字には次のエスケープ文字を使用できます。
エスケープ文字 |
意味 |
---|---|
\a |
アラート文字(ベル) |
\b |
バックスペース文字※1 |
\f |
フォームフィード文字(改ページ) |
\n |
改行文字※2 |
\r |
復帰文字 |
\t |
タブ文字 |
\v |
垂直タブ文字 |
\xhex |
1〜2桁の16進値で表された文字(0〜9,a〜f,A〜F)※3 |
\c |
任意のリテラル文字(「\"」なら「"」) |
\\ |
1つのバックスラッシュ文字 |
終了コード
終了コード |
意味 |
---|---|
0 |
正常終了 |
1以上 |
エラー終了 |
使用例
-
ファイルの1レコード目から3レコード目を削除するdコマンドを指定します。入力ファイルは,file01.txtです。
file01.txtの内容
hitachi group01 Tokyo HITACHI group02 Yokohama hitachi group03 Fukuoka HITACHI group04 Hokkaido HITACHI group05 Ooita HITACHI group06 Hiroshima
コマンドの実行例を次に示します。
C:\DIR>%ADSH_OSCMD_DIR%\sed "1,3d" file01.txt HITACHI group04 Hokkaido HITACHI group05 Ooita HITACHI group06 Hiroshima
-
検索パターンに一致したレコードに対して,iコマンドで一致したレコードの前に2レコード追加し,aコマンドで一致したレコードの前に1レコード追加します。検索パターンに一致しないレコードはcコマンドで別のレコードに置き換えます。スクリプトファイルは,scpt01.sedです。入力ファイルは,file02.txtです。
scpt01.sedの内容
/file/{ i\ <FILE-LINE>\ [FILE-BEGIN] a\ [FILE-END] } /file/!{ c\ <DIR-LINE> }
file02.txtの内容
The file path used by trace is invalid. Don't know current directory. Input asc file is the same as output asc file. Cannot change directory. Merging two asc files is started.
コマンドの実行例を次に示します。
C:\DIR>%ADSH_OSCMD_DIR%\sed -f scpt01.sed file02.txt <FILE-LINE> [FILE-BEGIN] The file path used by trace is invalid. [FILE-END] <DIR-LINE> <FILE-LINE> [FILE-BEGIN] Input asc file is the same as output asc file. [FILE-END] <DIR-LINE> <FILE-LINE> [FILE-BEGIN] Merging two asc files is started. [FILE-END]
-
パターンに最初に一致する文字列を置き換えます。入力ファイルは,file03.txtです。
file03.txtの内容
日立 横浜支店 日立グループ 日立 東京支店 日立グループ 日立 沖縄支店 日立グループ 日立 福岡支店 日立グループ
コマンドの実行例を次に示します。
C:\DIR>%ADSH_OSCMD_DIR%\sed "s/日立/&製作所/" file03.txt 日立製作所 横浜支店 日立グループ 日立製作所 東京支店 日立グループ 日立製作所 沖縄支店 日立グループ 日立製作所 福岡支店 日立グループ
-
パターンに一致する文字列を整形して置き換えます。入力ファイルは,file04.txtです。
file04.txtの内容
日立 横浜支店 日立グループ 日立 東京支店 日立グループ 日立 沖縄支店 日立グループ 日立 北海道支店 日立グループ 日立 福岡支店 日立グループ
コマンドの実行例を次に示します。
C:\DIR>%ADSH_OSCMD_DIR%\sed "s/\(日立 \)\(.*\)\(支店\)/\1\3名:\2/" file04.txt 日立 支店名:横浜 日立グループ 日立 支店名:東京 日立グループ 日立 支店名:沖縄 日立グループ 日立 支店名:北海道 日立グループ 日立 支店名:福岡 日立グループ
-
パターンに2回目に一致する文字列を置き換えます。入力ファイルは,file05.txtです。
file05.txtの内容
日立 横浜支店 日立グループ 日立製作所 日立 東京支店 日立グループ 日立製作所 日立 沖縄支店 日立グループ 日立製作所 日立 福岡支店 日立グループ 日立製作所
コマンドの実行例を次に示します。
C:\DIR>%ADSH_OSCMD_DIR%\sed "s/日立/&製作所/2" file05.txt 日立 横浜支店 日立製作所グループ 日立製作所 日立 東京支店 日立製作所グループ 日立製作所 日立 沖縄支店 日立製作所グループ 日立製作所 日立 福岡支店 日立製作所グループ 日立製作所
-
特定範囲のレコードのパターンに一致するすべての文字列を置き換えます。入力ファイルは,file06.txtです。
file06.txtの内容
日立 横浜支店 日立グループ 日立 東京支店 日立グループ 日立 沖縄支店 日立グループ 日立 福岡支店 日立グループ
コマンドの実行例を次に示します。
C:\DIR>%ADSH_OSCMD_DIR%\sed "/東京/,/沖縄/s/日立/&製作所/g" file06.txt 日立 横浜支店 日立グループ 日立製作所 東京支店 日立製作所グループ 日立製作所 沖縄支店 日立製作所グループ 日立 福岡支店 日立グループ
-
sコマンドのフラグにpを指定し,文字列を置き換えたレコードを標準出力に出力します。入力ファイルは,file07.txtです。
file07.txtの内容
日立 横浜支店 日立グループ 日立 東京支店 日立グループ 日立 沖縄支店 日立グループ 日立 福岡支店 日立グループ
コマンドの実行例を次に示します。
-nオプションを指定した場合
C:\DIR>%ADSH_OSCMD_DIR%\sed -n "/東京/,/沖縄/s/日立/&製作所/gp" file07.txt 日立製作所 東京支店 日立製作所グループ 日立製作所 沖縄支店 日立製作所グループ
-nオプションを指定しない場合
C:\DIR>%ADSH_OSCMD_DIR%\sed "/東京/,/沖縄/s/日立/&製作所/gp" file07.txt 日立 横浜支店 日立グループ 日立製作所 東京支店 日立製作所グループ 日立製作所 東京支店 日立製作所グループ 日立製作所 沖縄支店 日立製作所グループ 日立製作所 沖縄支店 日立製作所グループ 日立 福岡支店 日立グループ
-
sコマンドのフラグにwを指定し,文字列を置き換えたレコードをファイルに出力します。入力ファイルは,file08.txtです。
file08.txtの内容
日立 横浜支店 日立グループ 日立 東京支店 日立グループ 日立 沖縄支店 日立グループ 日立 福岡支店 日立グループ
コマンドの実行例を次に示します。
C:\DIR>%ADSH_OSCMD_DIR%\sed -n "/東京/,/沖縄/s/日立/&製作所/gw dir\\out.txt" file08.txt C:\DIR>%ADSH_OSCMD_DIR%\cat dir\out.txt 日立製作所 東京支店 日立製作所グループ 日立製作所 沖縄支店 日立製作所グループ
-
特定範囲のレコード以外のレコードをファイルに出力します。入力ファイルは,file09.txtです。
file09.txtの内容
日立 横浜支店 日立グループ 日立 東京支店 日立グループ 日立 北海道支店 日立グループ 日立 沖縄支店 日立グループ 日立 福岡支店 日立グループ
コマンドの実行例を次に示します。
C:\DIR>sed -n "/東京/,/沖縄/!w dir\\out.txt" file09.txt C:\DIR>cat dir\out.txt 日立 横浜支店 日立グループ 日立 福岡支店 日立グループ
-
yコマンドで文字を置き換えます。入力ファイルは,file10.txtです。
file10.txtの内容
あ い う え お あ い う お え う い あ
コマンドの実行例を次に示します。
C:\DIR>%ADSH_OSCMD_DIR%\sed "y/あいうえお/アiウeオ/" file10.txt ア i ウ e オ ア i ウ オ e ウ i ア
-
検索パターンに一致したレコードと行番号を標準出力に出力します。スクリプトファイルの先頭レコードに「#n」を記述し,検索パターンに一致しないレコードは出力しません。スクリプトファイルは,scpt02.sedです。入力ファイルは,prog01.awkです。
scpt02.sedの内容
#n / print/{ = p }
prog01.awkの内容
BEGIN{ print "Extract record : group03 - group06" > "file06.txt" } /group03/,/group06/{ ※ count++; print >> "file06.txt"; } END{ printf "total record : %03d\n", count >> "file06.txt" }
- 注※
-
group03に一致するレコードからgroup06に一致するレコードを処理対象とします。
コマンドの実行例を次に示します。
C:\DIR>%ADSH_OSCMD_DIR%\sed -f scpt02.sed prog01.awk 2 print "Extract record : group03 - group06" > "file06.txt" 6 print >> "file06.txt"; 10 printf "total record : %03d\n", count >> "file06.txt"
-
lコマンドで印字できない文字とエスケープ文字を可視化して出力します。入力ファイルは,file11.txtです。
file11.txtの内容
日立(タブ)横浜\支店(タブ)日立グループ 日立(タブ)東京\支店(タブ)日立グループ 日立(タブ)福岡\支店(タブ)日立(0x12)※グループ
- 注※
-
1バイトのデータです。
コマンドの実行例を次に示します。
C:\DIR>%ADSH_OSCMD_DIR%\sed -n "l" file11.txt 日立\t横浜\\支店\t日立グループ$ 日立\t東京\\支店\t日立グループ$ 日立\t福岡\\支店\t日立\022グループ$
-
検索パターンに一致したレコードの位置にrコマンドで指定したファイル内のレコードを出力します。dコマンドで検索パターンに一致したレコードを削除します。スクリプトファイルは,scpt03.sedです。入力ファイルは,prog02.awk,およびheader.txtです。
scpt03.sedの内容
/^<Header>/{ r header.txt d }
prog02.awkの内容
################################################################### <Header> ################################################################### BEGIN{ str = "日立#横浜支店#日立グループ" num = split(str, arry,"#") for (i = 1; i <= num; i++ ) { print arry[i] } }
header.txtの内容
# Sample program # Hitachi group list
コマンドの実行例を次に示します。
C:\DIR>%ADSH_OSCMD_DIR%\sed -f scpt03.sed prog02.awk ################################################################### # Sample program # Hitachi group list ################################################################### BEGIN{ str = "日立#横浜支店#日立グループ" num = split(str, arry,"#") for (i = 1; i <= num; i++ ) { print arry[i] } }
-
ファイルからレコードブロックを抽出します。スクリプトファイルは,scpt04.sedです。入力ファイルは,file12.txtです。
scpt04.sedの内容
/^Error01/{ :LOOP n※1 /Error/{ /^Error01/b LOOP※2 /^Error01/!d } b LOOP※2 } d
- 注※1
-
現在のパターンスペースの内容を標準出力に出力し,次のレコードを入力します。
- 注※2
-
次のレコードを入力するためにnコマンドを実行するLOOPラベルに分岐します。
file12.txtの内容
Error01001 The file path used by trace is invalid. Error02001 Don't know current directory. Error01002 Unable to get the date for the start of the job execution. Spool job was not deleted. Error01003 Cannot change directory. Error02002 Asc file name size is exceeded limits for batch coverage function. Error01004 Failed to get the current time.
コマンドの実行例を次に示します。
C:\DIR>%ADSH_OSCMD_DIR%\sed -f scpt04.sed file12.txt Error01001 The file path used by trace is invalid. Error01002 Unable to get the date for the start of the job execution. Spool job was not deleted. Error01003 Cannot change directory. Error01004 Failed to get the current time.
-
qコマンドでパターンに一致したレコードを入力した場合にスクリプトを終了します。入力ファイルは,file13.txtです。
file13.txtの内容
Error01001 The file path used by trace is invalid. Error02001 Don't know current directory. Error01002 Unable to get the date for the start of the job execution. Spool job was not deleted. Error01003 Cannot change directory.
コマンドの実行例を次に示します。
C:\DIR>%ADSH_OSCMD_DIR%\sed "/Error01002/q" file13.txt Error01001 The file path used by trace is invalid. Error02001 Don't know current directory. Error01002
-
オプションエラーのメッセージを表示します。
このメッセージは,コマンドを実行するプラットフォームによって異なる場合があります。Windowsの例を次に示します。
C:\TEMP>%ADSH_OSCMD_DIR%\sed -x sed: illegal option -- x usage: sed [-aEnru] command [file ...] sed [-aEnru] [-e command] ... [-f command_file] ... [file ...]