【B-right/V(超漢字)のコンソール用sedのサンプル覚え書き】 ※他のツールを使った方が簡単に書けるスクリプトも含まれる。 ■ファイルの内容を表示させる #最終行を読み込んだら($)終了する(q)。 #読み込んだ行はすべてマッチするので自動的に表示される。 sed $q filename ■東京の電話番号の後に星印をつける s/\(03-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]\)/\1☆/g # #↓別の書き方 s/03-[0-9]\{4\}-[0-9]\{4\}/&☆/g ■awkで使えてsedで使えない正規表現 + ? | ■勘違いしやすい正規表現 cats*は、cat/cats/catss/catsss/...の何れにもマッチする。 \nは、復元するために部分的に保存しておいたパターン。&は、マッチした全体。 ■行頭に引用記号を挿入する s/\(^.*$\)/|\1/ #あらゆる0文字以上の文字列(.*)にマッチしたら( \( \) ) #その(\1)先頭に「|」を挿入する。 # #↓別の書き方 #任意の文字の連なり(.*)を検索し、マッチした文字列(&) #の前に「|」を挿入する。 #s/.*/|&/ ■タブ区切データの順番を入れ換える #"データ1[空白]データ2"→"データ2[タブ]データ1"と変換 # s/\([^ ]*\) *\([^ ]*\)/\2 \1/p # ↑タブ記号が入っている #空白以外([^ ])の連続([^ ]*)とマッチしたら( \( \) ) #マッチした1番目と2番目(\1,\2)を入換えてタブ記号で区切る。 # s/\(.*\) *\(.*\)/\2 \1/p #でも可。 ■「1999」を含む行だけ抜き出す(2)。 #1999を見つけたら(/1999/)出力する(p)。 #明示的に出力させない行は出力しない(-n)。 sed -n /1999/p filename ■連続した空行を1つにまとめる ---------------------------------------------------------- ############################## #matokugyo.sed #連続した空行を1行にまとめる。 ############################## # #uniqを使用した方が楽かも # #空行が来た時のみカッコ内の動作 /^$/{ #次の行を読む ##パターンスペースに次行のデータを読み込む。 ##パターンスペース内は「空行<改行>次行」となる N #次行も空行の場合はなにも出力せずに先頭に戻る ##パターンスペース内が改行のみの場合(=次行も空行)、 ##最初のセグメントを削除してスクリプトの先頭に戻る ##結果的に空行のみがパターンスペースに残る /^\n$/D #次の行が空行でなければ、改行+次行を出力して先頭に戻る p d } #空行でない行はそのまま出力 #連続した最後の空行も出力される p d ---------------------------------------------------------- ■空行を削除する #行頭と行末が隣り合った行(^$)を見つけたら(=空行)、削除(d)する。 sed /^$/d filename1 > filename2 ■文書の最初の5行だけを表示させる #5行目を読み込んだら(5)終了する(q)。 #読み込んだ行はすべてマッチするので自動的に表示される。 sed 5q filename ■英数記号を半幅文字に変換する ---------------------------------------------------------- ############################## #zenhan.sed #英字・記号・数字を半幅に変換 ############################## # #↓ASCII記号(コード順) #[space]!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ # y/abcdefghijklmn/abcdefghijklmn/ y/opqrstuvwxyz/opqrstuvwxyz/ y/ABCDEFGHIJKLMN/ABCDEFGHIJKLMN/ y/OPQRSTUVWXYZ/OPQRSTUVWXYZ/ y/ !”#$%&’()*+,−./ !"#$%&'()*+,-./ y/:;<=>?@[¥]^_`{|} ̄/:;<=>?@[\]^_`{|}~/ y/0123456789/0123456789/ #スラッシュのみ別に記述。 s///\//g ---------------------------------------------------------- ■html文書を、テキスト文書に整形する -------------------h2t.sed--------------------------------------- #html文書を、テキスト文書に整形する #タグは"<" と ">" で囲まれているものとする #一部の実体参照をテキストに直す。 #
をリターンに変換 s/<[Bb][Rr]>/\ /g ##

をリターンに変換したいとき ##s/<[Pp]>/\ ##/g #タグを削除。タグの中にはコメントとして日本語も含まれる。 #タグの途中での改行されることもある。 s/<[^>]*>//g s/<[^>]*//g s/[^>]*>//g #実体参照の空白を書き込む s/ / /g s/ / /g #(↓タブが入っている):タブか空白のみからなる行を削除。空行も。 /^[ ]*$/d ##空行を削除したくないとき ##/^[ ][ ]*$/d # #表示用に使ってはいけない文字の実体参照 s/<//g s/>/>/g s/&/&/g s/&/&/g #Latin-1文字の実体参照 s/¢/¢/g #... #シンボル・特殊文字文字の実体参照 s/"/"/g #... ----------------------------------------------------------------- ■文書中の見出しのみ抜き出す ------------------------------------------------------------- ############################################### #midanuki.sed #行末に句読点のない行を見出しと考え、抜き出す。 ############################################### # #予め、不要な行末の空白を削除しておく。 s/ *$// # #行末に句読点[=..。]のある行を削除(d)。 /[^\..。][^\..。]*$/d # #このスクリプトでは、行末に?!などが来た場合は判定できない。 #適宜「?!?!」や括弧などを加えること #また、このスクリプトでは見出しがピリオドで終る場合(例えば #イニシャルで終るなど)は判断を間違うので適宜修正のこと。 ------------------------------------------------------------- ■段落(行)の頭を5文字分下げる #段落の先頭に空白を5つ挿入する #見出し行(ピリオドで終らないものとする)にはなにもしない # #ピリオド(+空白)で終っている行(\. *$)を見つけたら、行頭 #の0個以上の空白(^ *)を空白5つ( )に置換する。 /\. *$/s/^ */ / ■英文の不要な空白を削除する sed -f kuhaku.sed filename ----------------------------------------------------------- ########################### #kuhaku.sed #英文の不要な空白を削除する ########################### # #重複した空白を削除する #行頭・句読点の前・行末・括弧の内側の空白を削除する #句読点として!?も含めたい場合は修正のこと。 # #1つ以上の連続した空白( *)を1つ( )にする s/ */ /g s#句読点の前の空白は不要。 s/ ,/,/g s/ \./\./g s/ :/:/g s/ ;/;/g #括弧の内側に接した空白は不要。 #'"による括弧廻りの空白は修正できない。 /( /(/g s/ )/)/g s/\[ /\[/g s/ \]/\]/g s/{ /{/g s/ }/}/g #行頭(^ *)・文末の空白( *$)は不要。 s/ *$// s/^ *// ----------------------------------------------------------- ■「1999」を含む行だけ抜き出す #"1999"を含む行以外(!)の範囲の行(/1999/!)を削除(d)(="1999"を含む行のみを出力)。 sed -e /1999/!d filename #または sed /1999/!d filename ■「1999」を含む行だけ削除する #「1999」を含む行を見つけたら(/1999/)その行を削除(d)する。 #マッチしない場合はそのまま出力する。 sed -e /1999/d filename # #↓別の書き方。 sed /1999/d filename ■「健」という文字を全削除。 #「健」という文字を空の文字列(//)に置換する。 sed s/健//g filename ■「TRON」を「トロン」に置換する(2):アドレス #3行目から10行目まで(3,10)の「TRON」を「トロン」に置換する。 sed 3,10s/TRON/トロン/g filename1 > filename2 # #以下、コマンドの部分のみ。 #↓この書き方は不可(BrV R2.0 コンソール用sed)。 #3,10/s/TRON/トロン/g # #最終行($)のみで置換する。 $s/TRON/トロン/g # #全ての行(1,$)で置換する。 1,$s/TRON/トロン/g # #全ての行で置換する(別の書き方)。 s/TRON/トロン/g # #↓誤った書き方(アドレスで文頭は"1"を使う)。 #^,$s/TRON/トロン/g # # #「□」で始まる行(^□)でのみ、置換する。 /^□/s/TRON/トロン/g # #「結び」という文字を含む行から最終行の範囲(/結び/,$)のみで置換する。 /結び/,$s/TRON/トロン/g # #「1989」で始まる行から「1995」で始まる行以外(!)の範囲の行(/^1989/,/^1995/!)で置換する。 /^1989/,/^1995/!s/TRON/トロン/g ■「TRON」を「トロン」に置換する(1):フラグ #出現した全ての(g)「TRON」を「トロン」に置換(s///)する。 sed s/TRON/トロン/g filename1 > filename2 # #以下、コマンドの部分のみ。 #1行のうち、2番目に現れる「TRON」のみ置換したい場合。 s/TRON/トロン/2 # #一行の内、最初に現れる「TRON」のみ置換したい場合。 s/TRON/トロン/1 # #一行の内、最初に現れる「TRON」のみ置換したい場合(別の書き方)。 s/TRON/トロン/ # #↓誤った書き方(フラグで範囲指定は出来ない)。 #s/TRON/トロン/2,3 ■コメント 「#」で始まる行はコメントと見做される。 行の途中においてもコメントとは見做されない。 「#」はどの行においてもよい(動作は仕様に依存するので、一般論としては推奨されないとのこと)。 ■超漢字コンソール用のsed(BrV R2.0 コンソール用sed) EUCコードで記述されたレコードに対して処理を行う。 コンソールの仕様による制限のため、コマンドラインによる指示ができない 場合も多い。ファイルによる指示の方が望ましい。 いわゆる、"一行野郎"は使いにくい。 #↓これは可。 sed s/TRON/トロン/g filename1 > filename2 # #↓この書き方は不可(BrV R2.0 コンソール用sed)。 #sed 's/TRON/トロン/g' filename1 > filename2 ■sed 対象のテキストを1行ずつメモリに読み込んで処理を行って出力する。 1.標準入力から、1行(=改行コードで区切られたデータ。改行コード自体は 含まない)ずつ、パターンスペースに読み込む。 2.パターンスペース内のテキストデータに対し、コマンド(またはスクリプト ファイルの第1行目から順に最終行まで)に従って処理を行う。 条件に合致しない場合は処理を行わない。 3.処理を行った結果を、明示的または非明示的に標準出力へ出力する。(条件 に合致しない場合はそのまま出力されることになることが多い。) 4.上記1-4の繰返し。