sed

Linuxコマンドsed

sedとは?

 状態:-  閲覧数:632  投稿日:2016-01-02  更新日:2018-03-26

表記


英語表記
・sed
・「ストリームエディタ」を意味する英語「stream editor」に由来

片仮名表記
・セド

内容


入力ストリーム(ファイルまたはパイプラインからの入力)に対してテキスト変換などのデータ処理をおこなうために使用されるプログラム
・入力を行単位で読取
・sedスクリプトと呼ばれるシンプルな命令文に従ってテキスト変換などの編集を行う
・行単位で出力

用途
・大量のテキストファイルに対して一括で定形の処理をおこなう場合に大きな威力を発揮
・正規表現に対応しているため、ある条件の範囲内の文字列を探し出して処理することが可能
・特定の条件に合った文字列を検索し置換するなどの用途に用いる

特徴
・対話型テキストエディタと異なり、処理の経過・内容を逐次ユーザに確認することはない

s コマンド

 閲覧数:161 投稿日:2016-01-08 更新日:2018-03-26 

正規表現で置換処理


単語や文章などに照合するパターンを検索・置換する場合には、s から始まるコマンドを使用
s/検索パターン/置換文字列/g
・s の次の文字(上の例では / 文字)が、検索パターンや置換文字列の区切りになる
・上記のように末尾に g と指定することで、検索パターンにマッチ(照合)するすべての文字列を置換
・検索文字列は正規表現で指定
・正規表現が区切り文字を含むときは、\ 文字を前置きする
・上記のように / が区切り文字のとき、/ 文字を検索するなら、\/ と指定
・置換文字列では、& 文字や \ 文字が特別な意味をもつ
・& 文字は、照合した文字列に置き換わる
・& 文字自体に置換するときは、\& と指定し、\ 文字自体に置換するときは、\\ と指定する
・上記のように / が区切り文字のとき、/ 文字に置換するなら \/ と指定する

末尾 g指定を省くと、パターンスペースの中で最初の文字列にだけ検索・置換を実行し、2番目以降は無視する
・最後の g はすべてのマッチした文字列を置換することを意味する
・ g がなくても全行で置換を実行するが、1行に2つ以上マッチした場合は 1つ目しか置換されない

具体例1.


タブ文字を改行へ置換
・g がないため、(全行で置換を実行するが)1行に2つ以上マッチした場合は 1つ目しか置換しない(最初に一致した文字列だけ置換)

置換前
・\t

置換後
・\n
sed 's/\t/\n/'

具体例2.


パイプ使用例
「title-5000.txt」「abstract-5000.txt」を読込、水平方向に連結後、先頭から1000行読み込んだ後最後の一行を表示。つまり1000行目を標準出力に出力表示。その際、タブ文字を改行へ置換
・g がないため、(全行で置換を実行するが)1行に2つ以上マッチした場合は 1つ目しか置換しない(最初に一致した文字列だけ置換)
$ paste title-5000.txt abstract-5000.txt | head -n 1000 | tail -n 1 | sed 's/\t/\n/'




-i(--in-place)オプション

 閲覧数:128 投稿日:2016-04-25 更新日:2018-03-26 

ファイルを上書き保存


ファイル置換する場合、-iオプションを指定しないと、置換結果がファイルに保存されない
・上書き置換

sedでファイルを上書き保存

-e オプション

 閲覧数:146 投稿日:2016-04-25 更新日:2018-03-28 

-e オプションがない場合


オプション以外の最初の引数が処理内容とみなされる
・大抵は -e を省略できる

迷走履歴

 閲覧数:245 投稿日:2016-04-25 更新日:2018-03-28 

エスケープ


「置き換え条件にてピリオドを文字として指定」する場合
・エスケープが必要

置換対象文字列に.を含む場合
・エスケープは不要

エラー


"sed: no input files"
・sedへ何のファイルも渡していない
・事前のセレクト結果が0件
・sed以前の処理を要見直し(今回はgrep)

勘違い


sed「-i」オプションが使用できない環境かも?
・CentOSは sed iオプションが使用できないのかも、と本気で疑う
→使用可能。指定の仕方がマズかっただけ





Man page of SED

Twitter検索結果。「sed」に関する最新ツイート

ゆう@せどり始めました。 @yu_sed
SED @SED_1818
発音 @_pronounce
SED @SED_1818



類似度ページランキング
順位 ページタイトル抜粋
1 Systemd 60
2 head 57
3 less 57
4 paste 50
5 sedコマンド使用例 46
6 Node.js 再設定 43
7 ls 40
8 du 40
9 df 40
10 poderosa内部エラー 38
11 Node.jsインストール 38
12 basename 36
13 CasperJS 36
14 Poderosaインストール 35
15 yum update bash 33
16 Indexed Database 32
17 Telnet / Windows7 30
18 more 29
19 Set User ID 29
20 Permissions 29
2021/9/21 11:24 更新
週間人気ページランキング / 9-14 → 9-20
順位 ページタイトル抜粋 アクセス数
1 PHPのmb_send_mail関数でメール送信できない | メール処理システム 29
2 Nginx設定。エラーログレベル | Nginx(Webサーバ) 21
3 Python 3.5 アンインストール / yum remove | Python(プログラミング言語) 11
4 FFmpeg 2.8.15 を yum インストール | ソフトウェアスイート 10
5 PHP実行ユーザ設定 / CentOS6 / Apache | PHP(プログラミング言語) 9
6 PHP Version 7.1.2 php-mecabエクステンション対応 / PHP 7.0.14 からのアップグレード  | MeCab(形態素解析) 8
6 ソースからビルドしたPython 2.7.3 アンインストール失敗 | Python(プログラミング言語) 8
7 touch コマンド / viコマンド。新規ファイル作成時の違い | Linuxコマンド 7
7 さくらVPS0 7
8 9回目-13.MySQL5.7.21設定 | CentOS 7 2週間無料のお試し期間 9回目(さくらVPS) 6
8 「設定ファイルに、暗号化 (blowfish_secret) 用の非公開パスフレーズの設定を必要とするようになりました。」対応 6
9 PHPファイルでchmodエラー | PHP(プログラミング言語) 5
9 設定 2019/1/22 / 一般ユーザがmailコマンドでメール送信 / 管理者がmailコマンドでメール送信 5
10 Postfix | メール処理システム 4
10 CentOSでcpコマンド動作確認するためには、Control + T ではなく、 -v オプションを使用 | cp(Linuxコマンド) 4
10 499 (Request has been forbidden by antivirus) | HTTP(通信プロトコル) 4
10 tar | Linuxコマンド 4
10 Python 3.6 インストール / make altinstall | Python(プログラミング言語) 4
10 「CentOS6」から「CentOS7」への移行 | CentOS 7 (CentOS) 4
10 echo と cat の違い 4
2021/9/21 1:01 更新