sed

Linuxコマンドsed

sedとは?

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

表記


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

片仮名表記
・セド

内容


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

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

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

s コマンド

 閲覧数:243 投稿日: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)オプション

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

ファイルを上書き保存


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

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

-e オプション

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

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


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

迷走履歴

 閲覧数:338 投稿日: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」に関する最新ツイート

Stephanie White @Stephan77699548
藤花 @To_ka0821
𝐌𝐀𝐈 @sed__hp
SED @SED_1818
藤花 @To_ka0821
@sed__hp 行こう 2022/10/05 17:38



類似度ページランキング
順位 ページタイトル抜粋
1 Systemd 60
2 head 57
3 less 57
4 paste 50
5 sedコマンド使用例 46
6 Node.js 再設定 43
7 df 40
8 du 40
9 ls 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 make 29
20 Set User ID 29
2022/10/05 21:16 更新
週間人気ページランキング / 9-28 → 10-4
順位 ページタイトル抜粋 アクセス数
0 さくらVPS0 18
0 PHP実行ユーザ設定 / CentOS6 / Apache | PHP(プログラミング言語) 18
1 PHPのmb_send_mail関数でメール送信できない | メール処理システム 17
2 phpの設定ファイルをphp.ini から分離させても良いの? 12
3 Nginx設定。エラーログレベル | Nginx(Webサーバ) 11
4 「RLogin」で文字化けするようになった場合は、オプション設定 - フォント - 文字セット -「UTF-8」を選択します。  | RLogin(ターミナルエミュレータ) 9
4 ImageMagick と imagick の違い | ImageMagick(ソフトウェアスイート) 9
5 FFmpeg 2.8.15 を yum インストール | ソフトウェアスイート 8
5 ABRT により 問題が検出されました | CentOS 7 (CentOS) 8
5 Python 3.5 アンインストール / yum remove | Python(プログラミング言語) 8
6 echo と cat の違い 7
6 Bearerとは? / Bearer Token とは? / 基本的な使い方 7
6 Postfix | メール処理システム 7
6 ImageMagick 6.7.2.7-2.el6 を yum アンインストール / ImageMagick 6.8.8-9 を make アンインストール | ImageMagick(ソフトウェアスイート) 7
7 PHP実行ユーザ設定 / CentOS7 / Nginx | PHP(プログラミング言語) 6
7 Sandboxモードを使うことができるsaharaプラグインを使ってみる 6
7 バーチャルホスト設定には細心の注意を! | バーチャルホスト(Apache) 6
7 grep -rl 置換前文字列 . | xargs sed -i 's/置換前文字列/置換後文字列/g' 6
7 touch コマンド / viコマンド。新規ファイル作成時の違い | Linuxコマンド 6
7 設定 2019/1/22 / 一般ユーザがmailコマンドでメール送信 / 管理者がmailコマンドでメール送信 6
2022/10/5 1:01 更新