sed
はstream editorの略で入力テキストをフィルタリング・テキスト変換するツールです。いろいろ複雑なこともできますが、ここではsed
を使った簡単な文字列置換を紹介してみようと思います。
基本的な使い方
基本的な使い方は次のような感じです。
$ echo "input" | sed "s/pattern/replacement/"
"input"
で入力した文字列のうちpattern
に該当する部分がreplacement
に置き換えられて表示されます。
テキストファイルの文字列を置換したい場合は次のような感じで使います。
$ sed "s/pattern/replacement/" input.txt
※結果を保存したい場合は> output.txt
でリダイレクトしてください。
簡単な置換のサンプル
簡単な置換の例として、一番先頭にある小文字のtを大文字のTに置き換えてみます。
$ echo "stream editor for filtering and transforming text" | sed 's/t/T/'
sTream editor for filtering and transforming text
tは複数ありますが、何も指定しない場合は一番最初にマッチした部分のみが置き換えられます。今回の場合はstreamのtが該当します。
すべてのtを大文字に置き換えたい場合は"s/pattern/replacement/g"
のようにg
を追加してください。
$ echo "stream editor for filtering and transforming text" | sed 's/t/T/g'
sTream ediTor for filTering and Transforming TexT
正規表現を使った置換のサンプル
正規表現の詳細は省略しますがsed
でも正規表現を使った置換ができます。
簡単な例として、スペース後のワードを-
で分割して表示してみたいと思います。
$ echo "stream editor for filtering and transforming text" | sed -r "s/ (.)([^ ]*)/ \1-\2/g"
stream e-ditor f-or f-iltering a-nd t-ransforming t-ext
ポイントとしては\n
(n
は1から9の数字)を使って()
でグループ化したn番目の文字列を参照できるという点です。
ちなみに、マッチした文字列全体を参照したい場合は&
が使えます。
$ echo "stream editor for filtering and transforming text" | sed -r "s/ (.)([^ ]*)/ \1-&/g"
stream e- editor f- for f- filtering a- and t- transforming t- text
関連記事
正規表現で文字列を分割したい場合はRegex.Split
C#で正規表現で文字列を分割したい場合はRegex.Splitが便利です。使い方は次のような感じです。
数字で分割するサンプル
using System;
using System.Text.RegularExpressions;
public class Example1
{
static public void Main ()
{
string pattern ...
Pythonでnkf
Pythonで文字コードが不明な文字列(例えばインターネット上のHTMLは文字コードが間違っている場合があります)はnkfを使うと簡単に取り扱うことができるみたいです。
# emerge -pv app-i18n/nkf
These are the packages that would be merged, in order:
Calculating dependencies... ...
コマンドラインを使った全角⇔半角の変換方法
nkfやsedを使ってコマンドラインから全角⇔半角の変換をする方法についてのまとめ。
全角⇒半角の変換
nkfを使う場合
全角から半角へはnkfの-Zオプションで変換できます。
全角英数字を半角英数字に変換
$ echo 'あいうえお 123456 abcdef' | nkf -Zあいうえお 123456 abcdef
全角英数字と全角スペースを半角に変換
...