last updated:2023/12/27

Hidemaru Q and A

第IV部〜テキスト編集を極める!!
 プログラム実行を利用したテキストの加工


プログラム実行を利用したテキストの加工

秀丸エディタでは「プログラム実行」を使うことにより、標準入力・標準出力を利用するプログラムを利用して、テキストを加工できます。

昔はlinuxのような便利なコマンドが少なくて活用しづらい機能でしたが、現在はWindowsでも便利なコマンドが増えたり、 PowerShellが導入されたことで色々な編集に活用できます。

メニューの「その他→プログラム実行」から使用できます。

【1】プログラム実行の方法

「プログラム実行」で標準入出力を使うを使う方法は、2通りあります。

第II部〜知っていると便利な秀丸の機能 プログラム実行」にある、以下の項目を参照してください。

どちらの方法を使うかは、実行するプログラムや、編集しているファイルの文字コードによります。

開いているファイルが「Shift_JIS」で、標準入力と標準出力の文字コードが「Shift_JIS」で動作するプログラム (もしくは、入出力のエンコードが起動オプションで指定可能なプログラム)である場合は、"<con"、">con" を使うのが簡単です。コマンドラインに「 <con >con」と付けて実行することで、外部プログラムの標準入力に現在の選択範囲を渡し、標準出力を選択範囲に出力できます。

実行するプログラムが、標準入出力の文字コードとしてUTF-8を期待する場合や編集しているファイルに「Shift_JISに含まれない文字」がある場合は、 "<con"、">con" は使わないでください。Shift_JISへの変換時にデータ欠落する場合があります。
その場合は、「オプション」-「詳細設定」を有効にし、エンコードを指定してください。

  • 「オプション」-「詳細設定」を有効にした場合は、「標準入力」「標準出力」も有効にしてください。「自動」を選んでおけば、"<con"、">con" を使う場合と同じになります。
  • 範囲選択していない状態で、"<con"、">con" を使うと、思わぬ結果になるので注意すること。
  • 範囲選択をしないで、カーソル位置に標準出力を挿入できます。
    「オプション」-「詳細設定」で、「標準出力」を有効にし、「挿入」を選んでください。

【2】実用例

OSに標準であるコマンドでの実行例です。

"<con"、">con" を使っているので、「詳細設定」を有効にする場合は、「標準入力」「標準出力」も有効にし「自動」を選んでください。

sort <con >con

選択範囲を並び替える。

起動オプションに "/R" を指定すると、逆順で出力されます。

sort /R <con >con

起動オプションに "/+<number>" を指定すると、<number>で指定した文字から比較を開始します。

sort /+5 <con >con

上記例では、5文字目から比較を行います。

findstr "hoge" <con >con

hogeという文字が入った行だけを抜き出す。

起動オプションに "/I" を指定すると、大文字小文字を無視します。

findstr /I "hoge" <con >con


powershell -c "$input | Get-Unique" <con >con

選択範囲の重複行を削除する。(事前にソートしておく必要があります)

$input は powershellの自動変数で、渡されたすべての入力を列挙する列挙子が格納されます。 (標準入力の内容が入っている)

powershell -c "1..5" >con

以下のような連番を選択範囲に書き出す。(「詳細設定」有効、「標準出力」を有効にして「挿入」に設定すれば、範囲選択は不要)

出力結果

1
2
3
4
5

数字を3桁にして、":"を追加したりも可能です。

powershell -c "1..5 | %{\"{0:000}:\" -f $_ }" >con

出力結果

001:
002:
003:
004:
005:


cmd /c "dir /b c:\hoge" >con

「c:\hoge」フォルダのファイル一覧を選択範囲に書き出す。

起動オプション "/b" は「ファイル名のみ出力」です。 "/on" を追加するとファイル名でソートされ出力されます。

powershell -c "$input | Sort-Object {$_.Length}" <con >con

選択範囲を行の長さでソートする。

$input は powershellの自動変数で、渡されたすべての入力を列挙する列挙子が格納されます。 (標準入力の内容が入っている)

逆順にソートしたい場合は、Sort-Object のオプションに -descending を指定します。

powershell -c "$input|Sort-Object -descending { $_.Length }"  <con >con

ページトップ 目次に戻る