2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[PowerShell] クリップボード活用 テキスト加工パイプライン

2
Last updated at Posted at 2026-01-21

はじめに

コピーしたテキストをそのままペーストしていませんか?
PowerShell を使えば、貼り付ける前に加工するという使い方ができます。

本記事では、Get-ClipboardSet-Clipboard を起点に、
文字列変換・行操作・抽出などをパイプラインで組み合わせる
実用的なテキスト加工例を紹介します。

コピペ作業を少しでも減らしたい方や、
PowerShell のパイプライン処理に慣れたい方の参考になれば幸いです。

動作環境

  • Windows: PowerShell 5.1以降(Windows 10/11に標準搭載)

基本パターン:取得→加工→セット

intro-diagram_qiita.png

# 基本形
Get-Clipboard | <加工処理> | Set-Clipboard

# 例:大文字変換
Get-Clipboard | ForEach-Object { $_.ToUpper() } | Set-Clipboard

# 例:トリム(前後の空白削除)
Get-Clipboard | ForEach-Object { $_.Trim() } | Set-Clipboard

Get-Clipboard の動作モード

オプション 戻り値 用途
(なし) 行ごとの配列 行単位の加工・フィルタ
-Raw 単一の文字列 正規表現抽出・JSON整形など全文処理

本記事では、行単位処理がほとんどですが、データ抽出やJSON整形など一部のセクションでは -Raw を使用します。

文字列変換

※ 行単位処理

image.png

# 大文字・小文字
Get-Clipboard | ForEach-Object { $_.ToUpper() } | Set-Clipboard   # HELLO
Get-Clipboard | ForEach-Object { $_.ToLower() } | Set-Clipboard   # hello

# キャメルケース → スネークケース
Get-Clipboard | ForEach-Object {
    ($_ -creplace '([A-Z])', '_$1').ToLower().TrimStart('_')
} | Set-Clipboard
# userName → user_name
# ※ 略語を含む場合(例: URLValue → u_r_l_value)は期待とズレることがあります

# スネークケース → パスカルケース
Get-Clipboard | ForEach-Object {
    ($_ -split '_' | Where-Object { $_.Length -gt 0 } | ForEach-Object {
        $_.Substring(0,1).ToUpper() + $(if ($_.Length -gt 1) { $_.Substring(1) } else { '' })
    }) -join ''
} | Set-Clipboard
# user_name → UserName
# _test → Test、test__name → TestName も正しく処理
# ※ 先頭を小文字にしたい場合(camelCase)は、結果に対して追加処理が必要です

行操作

※ 行単位処理

line-operation-diagram_qiita.png

# 空行削除(空白のみの行も削除)
Get-Clipboard | Where-Object { $_.Trim() -ne "" } | Set-Clipboard

# 重複行削除
Get-Clipboard | Select-Object -Unique | Set-Clipboard

# ソート
Get-Clipboard | Sort-Object | Set-Clipboard

# 降順ソート
Get-Clipboard | Sort-Object -Descending | Set-Clipboard

# 行番号付与
$i = 1
Get-Clipboard | ForEach-Object { "{0:D3}. {1}" -f $i++, $_ } | Set-Clipboard

# 先頭N行だけ
Get-Clipboard | Select-Object -First 10 | Set-Clipboard

# 末尾N行だけ
Get-Clipboard | Select-Object -Last 5 | Set-Clipboard

# 特定行をスキップ
Get-Clipboard | Select-Object -Skip 2 | Set-Clipboard

検索・フィルタ

※ 行単位処理

search-filter-diagram_qiita.png

# 特定パターンを含む行だけ
Get-Clipboard | Where-Object { $_ -match "error" } | Set-Clipboard

# 特定パターンを含まない行
Get-Clipboard | Where-Object { $_ -notmatch "debug" } | Set-Clipboard

# 空白行以外(完全な空行のみ削除、スペースやタブだけの行は残る)
Get-Clipboard | Where-Object { $_ -match '\S' } | Set-Clipboard
# ※ 空白のみの行も削除したい場合は「行操作」セクションの空行削除を使用

# 数字を含む行
Get-Clipboard | Where-Object { $_ -match '\d' } | Set-Clipboard

置換・削除

※ 行単位処理

replace-delete-diagram_qiita.png

# 単純置換
Get-Clipboard | ForEach-Object { $_ -replace "old", "new" } | Set-Clipboard

# 複数パターン置換
Get-Clipboard | ForEach-Object {
    $_ -replace "foo", "bar" -replace "baz", "qux"
} | Set-Clipboard

# タブをスペースに
Get-Clipboard | ForEach-Object { $_ -replace "`t", "    " } | Set-Clipboard

# 連続スペースを1つに
Get-Clipboard | ForEach-Object { $_ -replace '\s+', ' ' } | Set-Clipboard

# コメント行削除(行頭が # で始まる行を削除)
Get-Clipboard | Where-Object { $_ -notmatch '^\s*#' } | Set-Clipboard
# ※ 行末コメント(例: コード # コメント)は削除されません

# HTMLタグ削除
Get-Clipboard | ForEach-Object { $_ -replace '<[^>]+>', '' } | Set-Clipboard

フォーマット変換

※ 行単位処理(一部 -Raw 使用)

format-conversion-diagram_qiita.png

# CSV → タブ区切り
Get-Clipboard | ForEach-Object { $_ -replace ',', "`t" } | Set-Clipboard
# ※ 単純なCSV向け。クォートやカンマを含むフィールドがあると正しく変換されません

# タブ区切り → CSV
Get-Clipboard | ForEach-Object { $_ -replace "`t", ',' } | Set-Clipboard
# ※ 単純なデータ向け。フィールド内にカンマがあると壊れます

# 各行をクォートで囲む
Get-Clipboard | ForEach-Object { "`"$_`"" } | Set-Clipboard

# リストをカンマ区切りに
(Get-Clipboard) -join ", " | Set-Clipboard

# カンマ区切りをリストに(-Raw使用)
(Get-Clipboard -Raw) -split ",\s*" | Set-Clipboard

# JSON整形(-Raw使用)
Get-Clipboard -Raw | ConvertFrom-Json | ConvertTo-Json -Depth 10 | Set-Clipboard
# ※ クリップボードの内容が不正なJSONの場合はエラーになります

プログラミング支援

※ 行単位処理

programming-support-diagram_qiita.png

# 変数宣言生成(各行を変数に)
Get-Clipboard | ForEach-Object {
    "`$" + ($_ -replace '\s+', '_') + " = `"`""
} | Set-Clipboard

# SQL IN句生成
$items = (Get-Clipboard) -replace "'", "''"
"('" + ($items -join "', '") + "')" | Set-Clipboard
# ('item1', 'item2', 'item3')

# 配列リテラル生成
$items = Get-Clipboard
"@(" + (($items | ForEach-Object { "`"$_`"" }) -join ", ") + ")" | Set-Clipboard
# @("item1", "item2", "item3")

# Markdownリスト生成
Get-Clipboard | ForEach-Object { "- $_" } | Set-Clipboard

# HTMLリスト生成
@("<ul>") + (Get-Clipboard | ForEach-Object { "  <li>$_</li>" }) + @("</ul>") | Set-Clipboard

データ抽出

※ 全文処理(-Raw 使用)

以下の正規表現は簡易的な抽出用であり、厳密なバリデーションではありません。

image.png

# メールアドレス抽出
$text = Get-Clipboard -Raw
[regex]::Matches($text, '[\w.+-]+@[\w.-]+\.\w+').Value |
    Select-Object -Unique | Set-Clipboard
# ※ 簡易パターンのため、一部の特殊なアドレスは取りこぼす可能性があります

# URL抽出
[regex]::Matches($text, 'https?://[^\s<>"]+').Value |
    Select-Object -Unique | Set-Clipboard

# 数値だけ抽出
[regex]::Matches($text, '\d+').Value | Set-Clipboard

# 日付抽出(YYYY-MM-DD形式)
[regex]::Matches($text, '\d{4}-\d{2}-\d{2}').Value | Set-Clipboard
# ※ 形式のみのチェックです。2099-99-99 なども抽出されます

# IPアドレス抽出
[regex]::Matches($text, '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}').Value | Set-Clipboard
# ※ 形式のみのチェックです。999.999.999.999 なども抽出されます

便利関数の定義

utility-function-diagram_qiita.png

# プロファイルに追加して常用
function Edit-Clipboard {
    param(
        [Parameter(Mandatory)]
        [scriptblock]$Process,
        [switch]$Raw
    )
    $clip = if ($Raw) { Get-Clipboard -Raw } else { Get-Clipboard }
    $clip | ForEach-Object $Process | Set-Clipboard
}

# 使用例
Edit-Clipboard { $_.ToUpper() }
Edit-Clipboard { $_ -replace "old", "new" }
Edit-Clipboard { if ($_ -match "error") { $_ } }
Edit-Clipboard -Raw { [regex]::Matches($_, '\d+').Value }

# よく使う処理を関数化
function ConvertTo-UpperClip { Get-Clipboard | ForEach-Object { $_.ToUpper() } | Set-Clipboard }
function Remove-EmptyLines { Get-Clipboard | Where-Object { $_.Trim() -ne "" } | Set-Clipboard }
function Sort-ClipLines { Get-Clipboard | Sort-Object | Set-Clipboard }
function Get-UniqueLines { Get-Clipboard | Select-Object -Unique | Set-Clipboard }

複合処理の例

# ログからエラー行を抽出・整形
Get-Clipboard |
    Where-Object { $_ -match "ERROR" } |
    ForEach-Object { $_ -replace '^\[.*?\]\s*', '' } |
    Select-Object -Unique |
    Sort-Object |
    Set-Clipboard

# CSVデータを整形(複雑なCSVにも対応)
Get-Clipboard |
    ConvertFrom-Csv |
    Where-Object { $_.Status -eq "Active" } |
    Select-Object Name, Email |
    ConvertTo-Csv -NoTypeInformation |
    Set-Clipboard

まとめ

summary-diagram_qiita.png

操作 コマンド例
大文字変換 ForEach-Object { $_.ToUpper() }
空行削除 Where-Object { $_.Trim() -ne "" }
重複削除 Select-Object -Unique
ソート Sort-Object
置換 ForEach-Object { $_ -replace "a","b" }
フィルタ Where-Object { $_ -match "pattern" }

解説動画 (自分用)

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?