正規表現に一致する行を削除するツール
パターンで行を取り除きます。^DEBUG\bを指定すると、5行のログからDEBUGの2行が消え、INFOとERRORの3行はそのまま残ります。削除した行数と残った行数も分かります。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- パターン
- ^DEBUG\b
- テキスト
- INFO Server started ERROR Connection lost INFO Server ready
- 削除数
- 2
- 残した数
- 3
「正規表現に一致する行を削除」は、複数行のテキストを1行ずつ正規表現で検査し、一致した行をすべて取り除く機能です。ログレベル、生成コメント、タイムスタンプ、識別子の接頭辞、構造化レコードの種別など、削除対象が完全に同じ値ではなく共通の規則を持つ場合に役立ちます。残す行は元の行末を含めてそのまま維持し、削除した行数と保持した行数も返すため、自動処理でも変更内容をご確認いただけます。
削除する行に合うパターンを記述します
入力元をtextに、JavaScriptの正規表現をpatternに指定してください。式を囲むスラッシュは付けません。たとえば<code>/^DEBUG\b/</code>ではなく<code>^DEBUG\b</code>と入力します。
各行は個別に検査され、一部でも一致すればその行を削除します。対象文字列が先頭に必要なら<code>^</code>、末尾に必要なら<code>$</code>、行全体を規則に合わせる場合は両方をお使いください。
<code>^\s*#</code>なら空白以外の最初の文字がハッシュである行を、<code>temporary$</code>ならその語で終わる行を削除できます。照合では大文字と小文字を区別し、標準のJavaScript正規表現構文を使用します。
最初は対象を絞った式にし、件数と結果をご確認のうえ、必要な行だけが選ばれたと判断できた場合に限って範囲を広げてください。
行末と空行の扱いを正確に把握できます
このフィルターはUnixの改行、Windowsの復帰と改行の組み合わせ、単独の復帰を認識します。保持する各行に付随する元の行末を維持するため、複数方式が混在する入力や特定環境の入力を暗黙に統一しません。正規表現を照合する対象は行の本文だけであり、行末文字は含みません。
空行も1つの行として扱われ、<code>^$</code>で削除できます。入力が改行で終わる場合、その区切りは、直前の保持対象行が削除されない限り、その行に付いたまま残ります。そのため、終端のない最終行を削除すると、直前の区切りが保持されることがあります。
これは残した行のバイトを忠実に維持する動作です。空の入力は1つの空行として扱います。前後空白の除去、大小文字の変換、空白の整理は行いません。
ログやコードを決定的かつ安全に絞り込めます
この機能は、比較、索引作成、レビュー、インポートの前処理に適しています。ログでは、既知のヘルスチェックや頻出する重要度の接頭辞を除き、意味のある事象だけを分析に回せます。生成コードでは、ビルドを比較する前に固定の見出しコメントを取り除けます。
構造化された出力では、行頭がヘッダー、フッター、不要な分類を示すレコードを除外できます。同じ決定的アルゴリズムがネットワークを使わずに動くため、同じ入力を繰り返すと同じ結果になります。式は1回だけコンパイルしますが、曖昧な入れ子の反復を含む正規表現は計算量が大きくなる場合があります。
大きな入力には、具体的でアンカーを付けた式を推奨します。規則を作る際は返却テキストをご確認になり、件数を自動処理の安全策としてお使いください。たとえば1行だけを消す予定の処理が数百行を報告した場合、配備を停止できます。
活用例
不要なログ項目を除去
繰り返されるデバッグ、ヘルスチェック、監視の行を捨て、調査が必要な事象を残します。
生成されたソースを整理
重要な差分を確認する前に、見出しコメント、生成器の印、環境固有の行を取り除きます。
行単位のレコードを選別
次の処理に渡す前に、ヘッダー、フッター、コメント、不要な接頭辞を出力から除外します。
よくある質問
どの正規表現構文を使用しますか?
JavaScriptの正規表現構文を使用します。両端を囲むスラッシュは付けずにパターンをご指定ください。
一致した行は空行に置き換わりますか?
いいえ。 一致した行とその行末を削除し、残りの行は変更せずに返します。
空行や空白だけの行も削除できますか?
はい。 空行には^$を、空白だけの行には^\s*$をお使いください。
特定の語で始まる行だけを削除するには?
語の前に^を付けて、^DEBUGのように指定します。^がないと、その語が行のどこかに含まれているだけで、その行は削除されます。
大文字と小文字は区別されますか?
はい、区別されます。^DEBUGはDEBUGで始まる行を消しますが、debugで始まる行は残します。削除した行数と残った行数を見て、意図どおりか確かめてください。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/str/remove-lines-matching \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"INFO Server started\nDEBUG Cache miss\nERROR Connection lost\nDEBUG Retrying\nINFO Server ready","pattern":"^DEBUG\\b"}'const res = await fetch("https://api.kit.forhosting.com/str/remove-lines-matching", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "INFO Server started\nDEBUG Cache miss\nERROR Connection lost\nDEBUG Retrying\nINFO Server ready",
"pattern": "^DEBUG\\b"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/remove-lines-matching",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "INFO Server started\nDEBUG Cache miss\nERROR Connection lost\nDEBUG Retrying\nINFO Server ready",
"pattern": "^DEBUG\\b"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/remove-lines-matching", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"INFO Server started\\nDEBUG Cache miss\\nERROR Connection lost\\nDEBUG Retrying\\nINFO Server ready","pattern":"^DEBUG\\\\b"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"INFO Server started\nDEBUG Cache miss\nERROR Connection lost\nDEBUG Retrying\nINFO Server ready","pattern":"^DEBUG\\b"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/remove-lines-matching", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text": "INFO Server started\nDEBUG Cache miss\nERROR Connection lost\nDEBUG Retrying\nINFO Server ready",
"pattern": "^DEBUG\\b"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.remove_lines_matching",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
削除する行に合うパターンを記述します
JSON内のエスケープは通常のJSON規則に従うため、生のJSONリクエストではバックスラッシュを2つ記述します。
行末と空行の扱いを正確に把握できます
応答にはremoved_countとkept_countが含まれるため、想定以上に広い編集をスクリプトで拒否できます。
ログやコードを決定的かつ安全に絞り込めます
不正な正規表現構文は、途中まで処理したテキストを返さず、<code>invalid_input</code>として拒否します。APIリクエストは$0.002で、ブラウザ版はローカルで実行されます。
技術的な質問
パターンは改行文字にも一致しますか?
いいえ。各式は行末を除いた1行の本文に対して検査されます。
パターンが不正な場合はどうなりますか?
リクエストはinvalid_inputエラーとなり、パターンが不正な正規表現であることを示します。
APIリクエストの料金はいくらですか?
APIリクエスト1回の料金は$0.002です。ブラウザでも対話的に絞り込めます。