更新日 : 2020年6月24日, はじめに紹介した書式では、1つの行に複数の置換対象文字列に一致した文字列が存在した場合でも、最初に一致した文字列のみしか置換されません。, そこで全ての一致した文字列を置換するためには以下のように行います。 linuxなどで使うテキスト編集コマンドの使い方で、これさえ知っていればOKというもののまとめ(vi, sed, grep, sort, uniq, cut, join, tr, nkf, diff)。 googletag.defineSlot('/21812778492/blog_300x250_common_ctc01_adsence', [300, 250], 'div-gpt-ad-1566564396953-0').addService(googletag.pubads()); sedは、オプションの次に処理内容、対象ファイルは最後に書きます。 「-e」オプションだけで実行した場合には、コマンドラインに表示されるだけで、対象ファイルは変更されません。 「-e」の部分を「-i」にする(または、「-i」を付け加える)と、対象ファイルが直接変更されます。 いきなり「-i」を使うのではなく、「-e」で確認してからの方が良いです。 「-e」は、sedで加工して変数に格納するような場合に便利です。 googletag.defineSlot('/21812778492/blog_300x250_common_sidemiddle02', [[300, 250], [336, 280]], 'div-gpt-ad-1559710302450-0').addService(googletag.pubads()); $ sed -e '1,3d' sample2.txt, などについて解説しました。「sed」コマンドは文字列を置換するときに非常に便利ですので、使い方についてはよく理解しておきましょう。, もし、「sed」コマンドについて忘れてしまったら、この記事を参考にしてくださいね!, 当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。 Linuxでバイナリ編集を行うコマンドはあるでしょうか。sed、awkのバイナリ版みたいなものを想定しています。このコマンドを使って、例えば複数のファイルの何バイト目を何々の値に一括して書き換える、ということを行いたいと思っています。 検索してechoとddを使う方法を見つけました。 googletag.defineSlot('/21812778492/blog_300x250_common_fixed01_adsense', [[300, 250], [336, 280]], 'div-gpt-ad-1565194485392-0').addService(googletag.pubads()); $ sed -e '2d' sample.txt, また、複数行を削除することもできます。以下1〜3行目を削除しています。 評価を下げる理由を選択してください. googletag.defineSlot('/21812778492/blog_468x60_common_eyecatch02_adsence', [728, 90], 'div-gpt-ad-1567575393317-0').addService(googletag.pubads()); Linuxを含むUnixベースのOSで利用できるテキストエディタだ。 世の中にマウスのようなポインティングデバイスがまだ普及しておらず、キーボード入力が主流だった時代からある。 Linuxにはプリインストールされているため、スタンダードなエディタとなっている。 $ sed -e s/apple/APPLE/g sample.txt, 行頭のみ、行末のみ置換する場合は以下のように記述します。 1. Linuxではテキストデータを良く使う。もちろん、それらのテキストデータを置換や削除処理をしたいことがよくあるだろう。このページではシェルスクリプトで効率的に置換・削除を実現する方法についてお伝えした。参考にしていただければと思う。 googletag.defineSlot('/21812778492/blog_728x90_common_overlay_adsence', [728, 90], 'div-gpt-ad-1583302554779-0').addService(googletag.pubads()); Part1.Linuxユーザーにこそ推したい動画編集ソフト3選. sedと正規表現を使って先頭に文字列を追加する †. 標準入力をなにかしら処理して標準出力に出力するので、パイプとして使える。まあたいていのUNIXツールはパイプとして使えるのだが。 ファイル名を指定すればそのファイルを読み込んで処理して標準出力に出力する。 ファイル名を指定してオプション -i を使えば、そのファイルを読み込んで、結果をそのファイルに上書きする。ファイル自体を編集したい場合には便利。(-iはGNU sed限定) 処理内容は、置換処理や行の削除、選択などいろいろできて、オプション -eで指定する。 パイプで使う場合の例 ファ … はじめに sed awk grep コマンドの意味は、 sed:文字列を置換 awk:文字列を抽出 grep:文字列を検索 です。 2. sedコマンド 2-1. googletag.defineSlot('/21812778492/blog_300x250_common_sidemiddle01', [[300, 250], [336, 280]], 'div-gpt-ad-1559710269013-0').addService(googletag.pubads()); googletag.cmd.push(function() { プログラミングに関係のない質問 やってほしいことだけを記載した丸投げの質問 問題・課題が含まれていない質問 意図的に内容が抹消された質問 過去に投稿した質問と同じ内容の質問 広告と受け取られるような投稿. # sed-i -e "s/AAA/ZZZ/g" INFILE.txt これだけで、対象 ファイルが上書き編集される。これにはちょっと感動。 以下のようにすればバックアップ ファイルもとってくれる。-iとダブルクォーテーションの間は詰める。 pbjs.que=pbjs.que||[]; var googletag = googletag || {}; プロジェクト兼アプリケーションでもあるKDEが開発を担い、Linuxと同じくフリーなおかつオープンソースなので、可能性の広がりが感じられる動画編集ソフトです。 // 20201123TechブログのサイドADバナーの廃止により共通処理へ移動 googletag.defineSlot('/21812778492/blog_728x90_common_eyecatch01_adsence', [728, 90], 'div-gpt-ad-1566564252373-0').addService(googletag.pubads()); コ… pbjs.setConfig({bidderTimeout:2000}); その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。 Linuxではファイルに記述されている文字列を、指定した文字列で置換できる「sed」コマンドがあります。ここでは「sed」コマンドの使い方について、以下の内容で解説していきます。 この記事で「sed」 ファイル中の任意の箇所、例えば複数行にわたる正規表現にマッチした箇所の下に、複数行の文章を挿入するとき、Rubyのワンライナーでどのように書くかを考えてみる。またsedでの対処法も考えてみる。 今回編集するファイル名はtest.shとする。 googletag.defineSlot('/21812778492/blog_300x600_common_sidetop01', [[300, 600], [300, 250]], 'div-gpt-ad-1568780264618-0').addService(googletag.pubads()); 対象とするファイル名”input.ini”の中身に という文が書いてあるとします。 これのファイルの中身を端末からのコマンドで書き換えるためにはsedコマンドを利用します。 sedコマンドとは、置換用のコマンドです。 例えば、コマンドライン上で と入力すると”input.ini”の中身の”a=7″に一致する場所を”a=9″に置換して出力します。 ここで重要なのが、”a=7″に一致する場所だけなので、後ろにあるコンマは影響されません。 実際に実行してみると となってコマンドライン上に出力されます。 この時、書き換わった内 … このようにしてファイルパスなどスラッシュが入ったものでもsedコマンドを打つことができます。 %のところをstrong>@」を使用しましょう。, 「cat」コマンドについては、以下の記事で詳しく解説しています! →フェイスブックはこちら, 現役生徒500名以上が在籍する弊社のプログラミング学習プランをあなたに合わせて最短1分で診断します。. }); Linuxではファイルに記述されている文字列を、指定した文字列で置換できる「sed」コマンドがあります。ここでは「sed」コマンドの使い方について、以下の内容で解説していきます。, この記事で「sed」コマンドで文字列を置換する方法についてわかりやすく解説していますので、ぜひ使い方を覚えておきましょう!, 「sed」コマンドは指定したファイルの文字列を所定の書式に従って文字列を置換して出力します。文字列を置き換えるには、以下の書式で記述します。 googletag.pubads().collapseEmptyDivs(); 範囲指定(どの行について処理する?) C. 文字列操作(どういう文字列操作をする?) 例えば, $ sed -i '3,10 s/hoge/fuga/g' input.txt であれば, A. ファイルの行を削除するには、sedのdコマンドを使うのが簡単です。 下記に書き方を紹介します。 sedのdコマンドを使って、ファイルの最後の行を削除 sedのdコマンドの使い方 下記の形式でsedコマンドを書くことで、行・・・ ファイルのn行目へ移動 ( :n でも同じ ) コマンドモードでの vi 編集と vi 検索 データ編集において、文字列の削除、コピー、貼り付けなどを行いたい場合は以下のキーを入力します。 # sed -i -e "s/AAA/ZZZ/g" INFILE.txt. test.txtファイル の各行で、 aaa と 最初にマッチした箇所 を AAA に置換します。 正規表現で ^ は先頭を示します。 したがって、^を指定すれば簡単に文字列の先頭に指定した文字列を追記できます。 以下のテキストファイルを使用して実 … googletag.pubads().enableSingleRequest(); ファイルの最後に行を挿入するには、sedのaコマンドを使うと簡単にできます。 下記に書き方を紹介します。 sedのaコマンドを使って、ファイルの最後に行を挿入 sedのaコマンドの使い方 下記の形式でsedコマンドを書く・・・ 行頭の空白を削除 sedで行頭の空白を削除するコマンド [crayon-5f8b896ee8f37683755957/] タブを削除 test.txtにあるタブを削除するコマンド [crayon-5f8b896ee8f40937217429/] ファイルを上書き編集 sedコマンドで上書きできると知らなかったので一度tmp Linuxコマンドを中心にIT技術関係の情報を発信します。また、Linuxコマンドについてはできるだけ実行例と実行結果を紹介したいと思います。, sedコマンドは、主にテキストにある文字列を別の文字列に置換することによく使われます。, sedとはストリームエディタ(stream editor)の略で、入力ファイルやパイプラインで渡されたテキストを編集することができます。, 普通のエディタと違い、パイプライン渡されたテキストを編集できることが特徴です。 また、ファイルにある特定の文字列を一括に編集できるのも利点といえるでしょう。, sedコマンドの特徴としては、テキストの置換がありますが、そのほかにも文字列の挿入や削除なども行うことができます。その際に正規表現のグループ化やアドレスについて知っていると複雑なテキスト編集を行うことができます。, また、パターンスペースやホールドスペースというsedコマンドの2つのバッファについて知っているとsedコマンドの処理についてより詳しくなり、さらに複雑なテキスト編集を行うことができます。, 他にもsedコマンドには条件分岐の処理や複数行の処理も行うことができます。 条件分岐の処理を使いこなすことができれば、sedコマンドの置換コマンドであるsコマンドをよりうまく使うことができます。 複数行の処理を行うことができれば、連続している複数行を一つの行にまとめる事等の処理を行うことができます。, addr:行の位置や範囲を示すもので、行番号や正規表現を用いて指定できます。 X:sedコマンドの機能を決定する、一文字のことです。 options:Xで指定したものによって必要なオプションのことです。, sedコマンドに入力ファイルがないもしくは-(ハイフン)の場合は、標準出力に対して、sedコマンドのスクリプトを実行します。, 上から順に 1つ目は入力がファイルがない場合です。 2つ目は-(ハイフン)を用いた場合です。 3つ目はリダイレクトによって、ファイルを標準入力としてsedコマンドに渡した場合です。, sedコマンドの出力は、オプションがない場合、標準出力に現れます。 また、sedコマンドの-iオプションをつけた場合、対象のファイルに対して出力を行います。, ファイルに保存する方法として、一つは、リダイレクトを利用して別のファイルを作成し、その後にmvコマンドなどでtmp.txtをitemtext.txtに置き換える方法があります。, -iオプションは、実際には一時ファイルが作られ、その一時ファイルに対してsedコマンドの出力が行われ、その一時ファイルの名前を対象のファイルとして置き換えます。, のように-iオプションの後に接尾辞を指定することでバックアップファイルを作成することができます。, この例ではitemtext.txt.bakのような置き換える前のバックアップファイルを作成することができます。, s/regexp/replacement/flagsは、sedコマンドの主要な機能といえるものです。, 正規表現(Regular Expression)regexpにマッチしたものを別の文字列replacementに置き換えます。 また、flagsは0個以上を指定することでき、flagsによって文字列の置き換え方などを変更することができます。, s/regexp/replacement/は、それぞれの行で最初に登場した文字列を別の文字列に置き換えます。 コマンド例では、最初に登場したappleという文字列をmelonという文字列に置き換えます。, s/regexp/replacement/gはそれぞれの行に登場するすべての正規表現にマッチした文字列を別の文字列に置き換えることができます。 コマンド例では、行に登場したすべてのappleをmelonに置き換えます。, s/regexp/replacement/1等のflagsに数字を入れたものは、n番目に登場したものだけを別の文字列に変更することができます。 コマンド例では、2番目に登場したスペースを:に変更しています。, 1番目のスペースを,に2番目に登場したスペースを:に変更する場合は以下のようにします。, -eオプションは、追加のスクリプトを記述することで変更することができます。 -eオプションは記述された順番に処理されます。, この例では、最初の-eオプションのスクリプトで1番目のスペースが,に変更されます。 その次に変更された状態のテキストで、次の-eオプションのスクリプトで1番目のスペース(元ファイルの2番目のスペース)を:に変更しています。, また、追加のスクリプトを記述する方法として;を用いて記述する方法もあります。以下のコマンド例でも上と同様の実行結果を得ることができます。, pフラグは変更があった行のみを表示します。 -nオプションは、スクリプトで明示的に表示する行を除き、sedコマンドで出力する行を表示しないようにします。, ここで、-nオプションをつけない場合は、変更があった個所だけが重複して表示されてしまうことに注意が必要です。, wフラグはファイル名を指定することでそのファイルに変更があった行を書き込みます。 また、ファイルがない場合は作成され、ある場合は上書きされます。, グループ化とは、正規表現の特徴の一つでグループ化したパターンをキャプチャして、置換文字列で使うことができます。, 例えば、「apple onion yuzu」なら、最初の単語の「apple」をその行の最後に追記して「apple onion yuzu apple」にします。, sedコマンドは、基本的に入力行をバッファに入れます。 このバッファのことをパターンスペース(pattern space)といいます。, また、sedコマンドは、パターンスペースとは別に補助的なバッファを持ちます。 これをホールドスペース(hold space)といいます。, 1.入力の行をパターンスペースに入れる。 2.sedコマンドのスクリプトを実行する。(パターンスペースの変更や表示等) 3.パターンスペースを表示する。(-nオプションがある場合は行わない), sedコマンドは、デフォルトではスクリプトの最後にパターンスペースを自動的に表示します。 -nオプションは、この自動表示をオフにします。 パターンスペースは、スクリプトでpコマンド等を明示的に記述しない限り、表示されなくなります。, 目的によっては、デフォルトの自動表示が不必要になる場合があります。 そんな時に、sedコマンドの-nオプションを覚えておくと便利です。, -fオプションは、sedコマンドのスクリプトが書かれたファイルを読み込むことができます。 この例では、script.sedがsedコマンドのスクリプトが書かれたファイルになります。, script.sedでは、sコマンドを用いてそれぞれの行で初めに現れた「apple」を「melon」に変えるスクリプトが書かれています。, で表現されます。 addr:行の位置や範囲を示すもので、行番号や正規表現を用いて指定できます。 X:sedコマンドの機能を決定する、一文字のことです。 options:Xで指定したものによって必要なオプションのことです。, アドレスを範囲で指定する場合は2つの数字をカンマで区切ります。 コマンド例では1から5行目に対して、コマンドを実行することができます。, 正規表現でアドレスを指定します。 例えば、コマンド例ではappleという単語が含まれている行に対して、コマンドを実行します。, 正規表現で指定する場合、「/」の記号で囲むほかに「\」と「%」等のような一文字の記号を組み合わせても正規表現を行うことができます。, 別の記号を用いて正規表現を用いると場合によって、エスケープシーケンスを使うことを減らすことができます。, 最後の例は一応アルファベットなどの記号も利用できるという例で、どこまでが区切りであるかがわかりにくいため、使用することを推奨しません。, アドレスの範囲は数字と正規表現を組み合わせることでも作ることができます。 また、数字と正規表現で範囲を作る際、0という数字を使うことができます。, これは、0,/regexp/の場合、「apple apple apple」という行が範囲の終了を表す/regexp/にマッチするため、itemtext.txtの最初の行の「apple apple apple」にマッチした時点で範囲が終了します。, しかし、1,/regexp/の場合はitemtext.txtの最初の行の「apple apple apple」が範囲の開始を表す1の方にマッチするため、範囲の終了を表すitemtext.txtの2つ目の「apple apple apple」という行が登場するまで、コマンドの実行が行われます。, 範囲の始点から次のnum行までを指定することができます。 コマンド例では、5行目から次の3行目、つまり8行目までを指定しています。, first行からstep行ずつを指定することができます。 コマンド例では、5行目から3行ずつ行を指定しています。, 範囲の始点からnum行の倍数までの行を指定します。 コマンド例では、5行目から4行目の倍数、つまりこの場合は8行目まで指定されます。, アドレスの最後に「!」をつけることで、アドレスで指定したものとは逆、つまり、アドレスで指定しなかったものを指定することができます。, cコマンドは行を別の文字列に置換します。 アドレスが指定されていない場合はそれぞれの行について、文字列を置換します。, !を用いて、アドレスの範囲の逆を指定すると、アドレス指定がある範囲でcコマンドでアドレスを指定しなかった時と同じような動作になります。, sedコマンドの-nオプションで余分な出力を除くと行番号のみを表示することができます。, アドレスで正規表現を使うと、その正規表現とマッチする行の行番号を表示することもできます。, lコマンドは、パターンスペースを明確な形式(unambiguous form)で表します。, 表示できない文字をC言語のエスケープ形式で示す。 長い行は\の文字で区切る。 それぞれの行の終端は$の記号で終了する。, wコマンドは、パターンスペースの内容をファイルに書き出すことができます。 コマンド例では、itemtext.txtの3行目の内容を標準出力に出力します。, /dev/stdoutを指定すると標準出力を指定することができます。 ほかにも、/dev/stderrを指定すると標準エラー出力を指定することができます。, rコマンドは、指定したファイルの内容を次の行に挿入します。 コマンド例では、itemtext.txtの3行目の次の行にファイルの内容を挿入しています。, 補足として、rコマンドはファイルの内容を次の行に対して挿入するが、工夫を行えば、手前に対して挿入しているかのように動作させることができます。, このテキストの追加は、次のsedコマンドでパターンスペースとホールドスペースを入れ替えるxコマンドを使って、行をずらして出力させるためです。 行をずらして表示しますと最後の行が出力されません。 そのために最後の行に対して追加で何かテキストを追加します。, 2つ目のsedコマンドを用いるとほとんど実行結果のように確認できます。 しかし、一番上の行に空行ができます。 これは最初のパターンスペースとホールドスペースの入れ替えにより、ホールドスペースの初期値が出力されるためです。 また、ホールドスペースの初期値は何もないため、一番上の行に空行が表示されます。, また、script.sedについて、「$q」を用いて、rコマンドで最後の行でファイルの内容を挿入させる前にsedコマンドのスクリプトを終了させます。 また、qコマンドはsedコマンドのスクリプトは終了させるコマンドです。, 3つ目のsedコマンドで一番上にできた空行を削除します。そうすると上の実行結果のように出力されます。, また、script.sedの「$q」を削除して、3つ目のsedコマンドで出力の最後の行を削除しても、同様の実行結果ができます。, スクリプトの複数コマンドを記述するには、様々な方法があります。 itemtext.txtの最初の行と最後の行を表示する例を出して、説明します。, 複数の-eオプションを使用することで、スクリプトの複数コマンドを記述することができます。 また、スクリプトのコマンドは、-eオプションが記述された順番で実行されます。, スクリプトのコマンドを;で区切って記述することで複数のコマンドを実行させることができます。, 記述方法としては、;で複数のコマンドを記述したほうがタイピング量も見栄えも良いと思います。 しかし、使い方によっては、ほかの方法も使用することがあると思います。, また、-eオプションと-fオプションを同時に使用した場合の結果は以下の通りになります。, この結果から、初めに呼ばれた-eオプションまたは-fオプションでのスクリプトを読み込み、その後に次の-eオプションまたは-fオプションでのスクリプトを読み込み、実行させることがわかります。, yコマンドは、文字を別の文字に置換することができます。 yコマンドは、y/変換前の文字/変換後の文字/で記述します。 コマンド例, pコマンドは、パターンスペースを表示することができます。 また、よく使うコマンドのひとつです。, dコマンドは、パターンスペースを削除することできます。 dコマンドを使った場合、その後にスクリプトが続いていても、次のサイクルに移行します。 また、dコマンドもよく使うコマンドのひとつです。, qコマンドは、スクリプトを終了させることができます。 その後のスクリプトは実行されません。 また、qコマンドの後にexitコードをつけることができます。, nコマンドは、sedコマンドに-nオプションがない場合は、現在のパターンスペースを表示して次のスクリプトのコマンドを実行します。 -nオプションがある場合、パターンスペースが次の行になります。, コマンドのグループ化は、アドレスを指定して複数のコマンドを使用する場合に便利です。, sedコマンドでは、現在編集中の行をそれ以降の行でも使用したい場合にホールドスペースが利用できます。 しかし、ホールドスペースというバッファは一つしか利用できないので注意が必要です。, hコマンドは、パターンスペースの内容をホールドスペースにコピーできます。 コピーする際、ホールドスペースが保存していた内容は削除されます。, ホールドスペースに何かを保存した場合、gコマンド等でパターンスペースに呼び戻さないとホールドスペースの内容を使うことができません。 コマンド例は次のgコマンドを参照してください。, gコマンドは、ホールドスペースの内容をパターンスペースにコピーできます。 コピーする際、パターンスペースが保存していた内容は削除されます。, コマンド例は、最初の1行目の内容をホールドスペースに保存します。 そして、それ以降の行の「onion onion onion」にマッチングした行で、そのマッチングした行の内容を表示した後に、ホールドスペースの内容を表示します。, Hコマンドは、ホールドスペースの内容をパターンスペースに追記することができます。 追記する際に、現在のホールドスペースの内容に改行を入れます。, コマンド例は、1行目の内容をホールドスペースに保存し、2行目の内容をホールドスペースに追記します。 その後に、それ以降の行の「onion onion onion」にマッチングした行で、そのマッチングした行の内容を表示した後に、ホールドスペースの内容を表示します。, Gコマンドは、ホールドスペースの内容をパターンスペースに追記することができます。 追記する際に、現在のパターンスペースの内容に改行を入れます。, コマンド例は、1行目の内容をホールドスペースに保存します。 その後に、それ以降の行の「onion onion onion」にマッチングした行で、ホールドスペースの内容をパターンスペースに追記して、パターンスペースの内容を表示します。, xコマンドは、パターンスペースの内容とホールドスペースの内容を入れ替えることができます。, コマンド例では、1行目の内容「apple apple apple」をホールドスペースに保存します。 その後に、それ以降の行の「onion onion onion」にマッチングした行で、パターンスペースの内容「apple apple apple」とホールドスペースの内容「onion onion onion」を入れ替え、入れ替えたパターンスペースの内容「onion onion onion」表示します。 さらに、パターンスペースの内容「onion onion onion」とホールドスペースの内容「apple apple apple」を入れ替えて、入れ替えたパターンスペースの内容「apple apple apple」を表示します。, sedコマンドのスクリプトは、プログラミングのgoto文のようにスクリプトのコマンドのどこかにラベルをつけることができます。 ラベルは:markや:labelのように、:と文字列でつけることができます。, このラベルは、bコマンドやtコマンド等で使用することができます。 ラベルの付け方は以下のようになります。, bコマンドは、無条件分岐のコマンドで、bコマンドで指定したラベルにジャンプします。 また、bコマンドにラベルが何も指定していない場合、次のサイクルに移行します。, tコマンドは、入力行が置換に成功していた場合、つまり、sコマンドが成功していた場合にラベルにジャンプします。, tコマンドの条件が成り立つときにラベルが何も指定していない場合、次のサイクルに移行します。, コマンド例は、appleの単語をすべて削除する例です。 また、簡単な整形処理も行っています。, Dコマンドは、改行までの行を1行削除して、残りのパターンスペースを残したまま次のサイクルを実行します。, コマンド例は、行の最後の単語と次の行の最初の単語が同じ場合は、くっつけるようなイメージの例です。, スクリプトをファイルから読み込む (-fオプション)で、 qq.bat → sed -fscript.sed aaaaaa script.sed → s/apple/melon/ aaaaaのファイルはできるのですが、中身が空のファイルができます。 Windows10ではできません….(ちなみにWindows7ではちゃんとできます) どの点がまずいのか教えていただきたいのですが、宜しくお願い致します。, まず、sedコマンドを単純に使用する場合はファイルを読み込んで、標準出力に出力されます。 そのため、質問の内容から何かの方法でsedコマンドの出力結果をファイルに書き込んでいると推察されます。, sedコマンドで、ファイルに内容を書き込む方法として主に2つの方法があります。 1つ目はリダイレクトする方法、2つ目はsedコマンドのiオプションを用いる方法です。, 1つ目のリダイレクトを行う場合、読み込むファイルと書き込むファイルを一緒に利用するとその内容は消えてしまいます。 悪い例:sed -fscript.sed aaaaaa > aaaaaa, そのため、リダイレクトしてファイルの内容を書き換えたい場合は、別のファイルに内容を書き込んでからそのファイルを置き換えます。 例:sed -fscript.sed aaaaaa > bbbbbb ; mv bbbbbb aaaaaa, 2つ目のsedコマンドのiオプションを用いる方法だとファイルの内容を直接書き換えます。 例:sed -i -fscript.sed aaaaaa, あなたのコマンドがWindows10ではできず、Windows7でできる理由として、 シェル(この場合だとコマンドプロンプト)の仕様が異なるからかもしれません。 この場合、おそらくリダイレクトを行う方法を用いてコマンド実行していると思います(違っていたら関係ないです、すみません)。 Windows10でこの方法を行った場合、リダイレクト先のファイルが先に作られた後にsedコマンドが実行されると考えらます(Ubuntu等のLinuxも基本的にこの方式でWindows10もおそらくこの方式だと思います)。 そのため、上の悪い例のコマンドを実行すると空のファイルが出力されます。 悪い例(再掲):sed -fscript.sed aaaaaa > aaaaaa 処理順: リダイレクト先に空のファイル作成→sedの実行→空のファイルを出力, しかし、Windows7ではリダイレクト先のテンポラリファイルを作成して、コマンドを実行しテンポラリファイルに出力してから、 テンポラリファイルをリダイレクト先のファイルへ置換していると考えられます(実際に検証していませんが、私が調べた限りだとおそらくこの仕様だと思われます)。 この場合、上の悪い例のコマンドを実行すると空のファイルではなく、読み込んだファイルにsedコマンドを実行した結果が得られます。 悪い例(再掲):sed -fscript.sed aaaaaa > aaaaaa 処理順: リダイレクト先の出力用テンポラリファイルを作成→sedの実行(結果はテンポラリファイルへ)→テンポラリファイルをリダイレクト先のファイルへ置換→sedで処理した意図したファイルを出力, おそらく、このシェルの仕様の違いでWindows7ではコマンドを実行して意図した結果が得られたのだと思います。 しかし、結論としてはWindows7での動作が特殊な例で、Windows10の動作がsedコマンドとして一般的な動作になると思います。, ありがとうございます。 試してみます。 気づかず返信遅くなりまして申し訳ありませんでした。, 次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。, sedコマンドでの正規表現のグループ化は「\(」と「\)」で囲むことで行うことができ、その後に「\1」、「\2」のように呼び出すことができます。, この例では、最初の外側にある「\(」と「\)」は行の全体を表し「\1」で呼び出すことができます。, 「[^ ]」はスペース以外の文字を表し、「*」は直前の文字の0回以上繰り返しを示す記号になります。, 最初の行を指定する場合は、数字で1を指定することで最初の行を指定することができます。, cコマンドは実行された後にスクリプトがすぐに終了するため、その後にあるsedコマンドのスクリプトは実行されないことに注意しましょう。.