サクラエディタで正規表現を使ってみる

サクラエディタでは正規表現を使って文字列を置換することができます。
正規表現を使うと簡単に色々な検索や置換ができ便利なので、いくつかを紹介します。
テキスト文字列の項目の区切りをタブ区切りに変換すると、そのままExcelに張り付けたとき、セルが分かれてくれるので便利だったりします。

正規表現の詳細については「[正規表現 メモ](https://qiita.com/yasushi-jp/items/4b768ffedc2905bcae54 "正規表現 メモ")」を参照してください。

# 環境

+ OS：Windows 10 Pro 22H2
+ サクラエディタ：サクラエディタ Ver. 2.1.0.0

# 例１（`|`をタブに変換）

```:変換前のテキスト
1row|aaa
2row|bbb
3row|ccc
4row|ddd
```

`|`をタブに変換するには以下の通り。

+ 置換前：`\|`
+ 置換後：`\t`

<font color="red">※置換前に`\|`と`｜`の前に`\`を付けているのは、`|`が正規表現のメタ文字のため、単なる文字として認識させるため`\`を付けてエスケープしています。</font>

```:変換後のテキスト
1row	aaa
2row	bbb
3row	ccc
4row	ddd
```

![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292434/339fb2d7-7b5e-b168-448b-1cb8a61df3a0.png)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292434/7456603a-515e-156f-8491-ddfacd4f740b.png" alt="02.png" width=80%>

![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292434/454b6540-04cb-7bf2-893b-d91633a4c994.png)

# 例２（`vmstat`コマンドの結果をタブ区切りに変換）

変換前のテキストとして、ここでは以下のコマンドで`vmstat`の結果を日付付きで出力しています。
`vmstat 1 | awk '{ print strftime("%Y/%m/%d %H:%M:%S"), $0 }'`


```:変換前のテキスト
2024/07/22 16:08:33 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
2024/07/22 16:08:33  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
2024/07/22 16:08:33  3  0      0 1727720   3164 167068    0    0   646   196  195  386  3  4 80 14  0
2024/07/22 16:08:34  0  0      0 1727660   3164 167068    0    0     0     0   31   32  0  0 100  0  0
2024/07/22 16:08:35  0  0      0 1727660   3164 167068    0    0     0     0   24   32  0  0 100  0  0
2024/07/22 16:08:36  0  0      0 1727660   3164 167068    0    0     0     0   33   31  0  0 100  0  0
2024/07/22 16:08:37  0  0      0 1727660   3164 167068    0    0     0     0   34   32  0  0 100  0  0
2024/07/22 16:08:38  0  0      0 1727660   3164 167068    0    0     0     0   42   39  0  0 100  0  0
2024/07/22 16:08:39  0  0      0 1727660   3164 167068    0    0     0     0   25   28  0  0 100  0  0
2024/07/22 16:08:40  0  0      0 1727660   3164 167068    0    0     0     0   37   35  0  0 100  0  0
2024/07/22 16:08:41  0  0      0 1727660   3164 167068    0    0     0     0   31   32  0  1 99  0  0
2024/07/22 16:08:42  0  0      0 1727660   3164 167068    0    0     0     0   33   36  0  0 100  0  0
```

1つ以上の連続するスペースをタブに変換するには以下の通り。

+ 置換前：` +`
+ 置換後：`\t`

```:変換後のテキスト
2024/07/22	16:08:33	procs	-----------memory----------	---swap--	-----io----	-system--	------cpu-----
2024/07/22	16:08:33	r	b	swpd	free	buff	cache	si	so	bi	bo	in	cs	us	sy	id	wa	st
2024/07/22	16:08:33	3	0	0	1727720	3164	167068	0	0	646	196	195	386	3	4	80	14	0
2024/07/22	16:08:34	0	0	0	1727660	3164	167068	0	0	0	0	31	32	0	0	100	0	0
2024/07/22	16:08:35	0	0	0	1727660	3164	167068	0	0	0	0	24	32	0	0	100	0	0
2024/07/22	16:08:36	0	0	0	1727660	3164	167068	0	0	0	0	33	31	0	0	100	0	0
2024/07/22	16:08:37	0	0	0	1727660	3164	167068	0	0	0	0	34	32	0	0	100	0	0
2024/07/22	16:08:38	0	0	0	1727660	3164	167068	0	0	0	0	42	39	0	0	100	0	0
2024/07/22	16:08:39	0	0	0	1727660	3164	167068	0	0	0	0	25	28	0	0	100	0	0
2024/07/22	16:08:40	0	0	0	1727660	3164	167068	0	0	0	0	37	35	0	0	100	0	0
2024/07/22	16:08:41	0	0	0	1727660	3164	167068	0	0	0	0	31	32	0	1	99	0	0
2024/07/22	16:08:42	0	0	0	1727660	3164	167068	0	0	0	0	33	36	0	0	100	0	0
```

![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292434/3ff5288f-ed94-d031-f7b3-c20292feeede.png)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292434/986ed286-f7ff-65f9-b890-2f11209028c0.png" alt="05.png" width=80%>

![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292434/8b9285c1-d985-ab85-56c9-0533e0b78aa8.png)

# 例３（apacheのアクセスログをタブ区切りに変換）

```:変換前のテキスト
192.168.0.2 - - [11/Jun/2023:19:02:23 +0900] "GET / HTTP/1.1" 200 620 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
192.168.0.2 - - [11/Jun/2023:19:02:23 +0900] "GET /js/chunk-vendors.ca179411.js HTTP/1.1" 200 97901 "http://192.168.0.9/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
192.168.0.2 - - [11/Jun/2023:19:02:23 +0900] "GET /js/app.d337ea2a.js HTTP/1.1" 200 15782 "http://192.168.0.9/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
192.168.0.2 - - [11/Jun/2023:19:02:23 +0900] "GET /css/app.9bdcf330.css HTTP/1.1" 200 425 "http://192.168.0.9/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
192.168.0.2 - - [11/Jun/2023:19:02:24 +0900] "GET /favicon.ico HTTP/1.1" 200 4286 "http://192.168.0.9/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
192.168.0.2 - - [11/Jun/2023:19:03:23 +0900] "GET /js/about.2921d089.js HTTP/1.1" 200 425 "http://192.168.0.9/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
192.168.0.2 - - [11/Jun/2023:19:03:53 +0900] "GET /js/app.d337ea2a.js.map HTTP/1.1" 200 23463 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
192.168.0.2 - - [11/Jun/2023:19:03:53 +0900] "GET /js/about.2921d089.js.map HTTP/1.1" 200 933 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
192.168.0.2 - - [11/Jun/2023:19:03:53 +0900] "GET /js/chunk-vendors.ca179411.js.map HTTP/1.1" 200 838872 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
```

スペース区切りをタブ区切りに変換し、`"[]`の文字列を除去するには以下の通り。

+ 置換前：`^(.*) (.*) (.*) \[(.*)\] "(.*)" (.*) (.*) "(.*)" "(.*)"$`
+ 置換後：`$1\t$2\t$3\t$4\t$5\t"$6"\t$7\t$8\t$9`

<font color="red">※ここで`$1`とは置換前の'()`の一つ目を表します。</font>

```:変換後のテキスト
192.168.0.2	-	-	11/Jun/2023:19:02:23 +0900	GET / HTTP/1.1	"200"	620	-	Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
192.168.0.2	-	-	11/Jun/2023:19:02:23 +0900	GET /js/chunk-vendors.ca179411.js HTTP/1.1	"200"	97901	http://192.168.0.9/	Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
192.168.0.2	-	-	11/Jun/2023:19:02:23 +0900	GET /js/app.d337ea2a.js HTTP/1.1	"200"	15782	http://192.168.0.9/	Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
192.168.0.2	-	-	11/Jun/2023:19:02:23 +0900	GET /css/app.9bdcf330.css HTTP/1.1	"200"	425	http://192.168.0.9/	Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
192.168.0.2	-	-	11/Jun/2023:19:02:24 +0900	GET /favicon.ico HTTP/1.1	"200"	4286	http://192.168.0.9/	Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
192.168.0.2	-	-	11/Jun/2023:19:03:23 +0900	GET /js/about.2921d089.js HTTP/1.1	"200"	425	http://192.168.0.9/	Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
192.168.0.2	-	-	11/Jun/2023:19:03:53 +0900	GET /js/app.d337ea2a.js.map HTTP/1.1	"200"	23463	-	Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
192.168.0.2	-	-	11/Jun/2023:19:03:53 +0900	GET /js/about.2921d089.js.map HTTP/1.1	"200"	933	-	Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
192.168.0.2	-	-	11/Jun/2023:19:03:53 +0900	GET /js/chunk-vendors.ca179411.js.map HTTP/1.1	"200"	838872	-	Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
```

![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292434/8e3b72e1-27cd-6b25-cc23-0164235f72ac.png)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292434/0abc1244-0dac-244e-9595-3a2412f8dd5a.png" alt="08.png" width=80%>

![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292434/820f18e6-9e35-34ff-4e65-be5f12ffd80b.png)

---

以上