%20%E3%81%AE%E3%81%BF%E3%82%92%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF%E3%83%BC%E3%81%99%E3%82%8B.png)
たとえば次のようなテキストがあります:
cd123aaq54
そして、数字だけを別のファイルに分けたいので、
12354
出力に。
私は次のようなコマンドをたくさん試してきました:
Get-Content text.txt | Select-String -Pattern '[0-9]'
Linux では、次のようにするとずっと簡単になります。
grep -o '[0-9][0-9]*' text >numbers
Windowscmd
シェルでこれを実行するにはどうすればよいですか?
答え1
入力ファイルからアルファベット文字を削除して数字だけを残すにはどうすればよいですか?
以下に 2 つの解決策を示します。
- パワーシェル
- Windows バッチファイル
PowerShell ソリューション
次のコマンドを使用します。
Get-Content input.txt | ForEach-Object {$_ -Replace "[^0-9]", ""} > output.txt
ノート:
input.txt
フィルタリングするテキストが含まれます。output.txt
フィルタリングされたテキストを含む数字以外の文字(英字だけでなく)はすべて削除されます。
例:
PS F:\test> type .\input.txt
cd123aaq54
zyx456abc321
PS F:\test> Get-Content input.txt | ForEach-Object {$_ -Replace "[^0-9]", ""} > output.txt
PS F:\test> type .\output.txt
12354
456321
PS F:\test>
Windows バッチファイルソリューション
次のバッチ ファイル (RemoveAlpha.cmd) を使用します。
@echo off
setlocal enabledelayedexpansion
set _alpha=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
rem read input file line by line
for /f "usebackq tokens=*" %%i in (`type %1`) do (
rem strip alpha characters by using them as delimeters
for /f "tokens=1,2 delims=%_alpha%" %%j in ("%%i") do (
rem write stripped text to output file
echo %%j%%k>>%2
)
)
endlocal
ノート:
上記は、
!@#$%^&*()
入力ファイルに特殊文字 ( ...) が含まれていないことを前提としています (特殊文字は削除されません)。'トリック' は、2 番目の
for
コマンドの区切り文字としてアルファ文字の文字列を使用することです。
使用法:
RemoveAlpha input output
input
: フィルタリングするテキストを含む入力ファイルのパス名。output
: コピーされたフィルター テキストを格納する出力ファイルのパス名。
例:
F:\test>RemoveAlpha input.txt output.txt
F:\test>type input.txt
cd123aaq54
zyx456abc321
F:\test>type output.txt
12354
456321
参考文献
- Windows CMD コマンドラインの AZ インデックス- Windows コマンド ラインに関連するあらゆることに関する優れたリファレンス。
- /fの場合- 別のコマンドの結果に対してコマンドをループします。
- タイプ- 1 つ以上のテキスト ファイルの内容を表示します。