sedafter: a stream editor


Top - 使用方法 - 使用方法(grepモード) - コマンド - 開発者ガイド - Javadoc - ダウンロード


組み込み言語としてのsedafter

Hello, world.

sedafterはJavaソースに組み込むことができます。
例として、標準入力からデータを読み込み、 aaaをbbbに置き換えるプログラムを作成しましょう。

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import net.morilib.sed.Sed;
import net.morilib.sed.pattern.SedBasicRegexEngine;

public class SampleS1 {

	public static void main(String[] args) {
		try {
			// equivalent to "sed 's/aaa/bbb'"
			Sed.execute("s/aaa/bbb/",
					new InputStreamReader(System.in),
					new OutputStreamWriter(System.out),
					SedBasicRegexEngine.getInstance(),
					true);
		} catch (IOException e) {
			// error handling
		}
	}

}
コマンドラインより実行すれば、sed "s/aaa/bbb/"と同じ動作をすることが 確認できると思います。

リソースからのソース読み込み

sedafterソースを別のリソースに配置し、 そこからプログラムを読み込ませるには以下のようにします。

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import net.morilib.sed.Sed;
import net.morilib.sed.pattern.SedBasicRegexEngine;

public class SampleS2 {

	public static void main(String[] args) {
		InputStream ins = null;

		try {
			ins = SampleS2.class.getResourceAsStream("sampleS2.sed");
			Sed.execute(new InputStreamReader(ins),
					new InputStreamReader(System.in),
					new OutputStreamWriter(System.out),
					SedBasicRegexEngine.getInstance(),
					true);
		} catch (IOException e) {
			// error handling
		} finally {
			if(ins != null) {
				try {
					ins.close();
				} catch (IOException e) {
					throw new RuntimeException(e);
				}
			}
		}
	}

}
InputStreamの読込先をファイルにすれば外部ファイルから ソースを取り込むことができます。

出力の取り出し方

sedafterの出力をJavaプログラムで使用したいときは、 出力が少なければStringWriterを標準出力として与えて その結果をtoString()メソッドなどで取り出します。
例として、4行目を表示するプログラムを与えます。

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringWriter;
import net.morilib.sed.Sed;
import net.morilib.sed.pattern.SedBasicRegexEngine;

public class SampleS3 {

	public static void main(String[] args) {
		StringWriter ous = new StringWriter();

		try {
			Sed.execute("4{p;q}",
					new InputStreamReader(System.in),
					ous,
					SedBasicRegexEngine.getInstance(),
					false);
			System.out.println(ous.toString());
		} catch (IOException e) {
			// error handling
		}
	}

}
入力についても、StringReaderなどを使用することで sedafterに与えることができます。