「為每一行加上前綴和後綴」可以在單次瀏覽器操作中裝飾多達一百萬個字元的文字,逐一在每個邏輯行的開頭與結尾插入字面前綴及/或後綴,同時保留行的順序、內部空白以及原本的行內容。由於工具完全在當前的分頁中執行,大量貼上的區塊會在裝置上處理,而不是傳輸到遠端服務,當文字內容包含記錄檔、客戶資料、程式碼範例,或任何你不想上傳的內容時,這一點非常重要。輸出會以純 UTF-8 TXT 檔案下載,不含位元組順序記號、不含富文字格式、不含試算表引號,也不會自動偵測分隔符號,因此結果就是你輸入的內容,加上你選擇包裹在前後的字串。這樣的組合 — 明確的輸入上限、本機處理路徑,以及刻意不加格式的下載方式 — 正是這個工具適合處理大型行清單前綴工作的原因,因為一般的尋找取代或「欄位轉 CSV」小工具在這種情況下會破壞資料。

為什麼大型文字需要不同的工作流程
當輸入只有幾十行時,幾乎任何尋找取代的技巧都能派上用場。但當輸入達到數萬行或數十萬字元時,那些讓小工作變得簡單的假設就開始失效。編輯器會在固定的欄位或字元上限截斷貼上的內容;試算表工具會加上你並未要求的引號、跳脫字元或換行格式轉換;伺服器端的處理器代表你的文字會離開本機,這對記錄檔、客戶識別碼、內部文件,以及任何受保密條款約束的內容來說都是個問題。即使在本機的命令列腳本,也可能因為 shell 引號或緩衝區限制而損壞好幾 MB 的貼上內容。
「為每一行加上前綴和後綴」工具正是為了那個中間地帶而設計:太長而無法手動編輯、又不適合上傳、但仍在瀏覽器分頁一次能處理的範圍內的文字。輸入的硬性上限是一百萬字元,而整個裝飾步驟 — 按照行界切割、串接前綴和後綴、再重新合併,最後產生 UTF-8 的文字 Blob — 全部都在 JavaScript 中於本機執行。輸入中的任何一個字元都不會離開裝置,結果檔案也是從用戶端的 Blob 物件產生,而不是從遠端端點串流回來。
工具在大規模處理時涵蓋了什麼
當文字量很大時,有幾項保證特別重要,因為任何一次意外的標準化或位元組順序記號都可能破壞下游的 grep、CI 記錄檔解析器,或 SQL 載入器。下表列出工具接受的輸入特性,以及每一項在輸出中的對應呈現方式。
| 輸入特性 | 工具中的行為 |
|---|---|
| 最多 1,000,000 字元 | 在單次貼上中接受;只有在超出上限時才會產生錯誤 |
| CRLF 行尾結尾 (Windows) | 輸入時可識別,並在輸出中標準化為 LF |
| CR 行尾結尾 (傳統 Mac) | 輸入時可識別,並在輸出中標準化為 LF |
| LF 行尾結尾 (Unix) | 在輸出中保留為 LF |
| 輸入結尾的換行字元 | 會變成最後一個空白的邏輯行,並依據空白行政策決定是否加以裝飾或跳過 |
| 表情符號與非拉丁字元 | 以 JavaScript 字串原樣傳遞,並在下載的 TXT 中以 UTF-8 輸出 |
| 預覽面板中的視覺換行 | 僅供顯示之用;不會在 下載的檔案中新增真正的換行字元 |
最後一列常常讓處理寬幅文字的人感到意外。一長串連續的 SQL 片段,或一筆不含空格的記錄檔項目,可能在瀏覽器預覽中以視覺方式換行,但那只是預覽區塊的顯示行為。下載的檔案仍然把同一行當作一條不中斷的字串保存。如果你想在下載前先確認實際的行數,「行數計算器」可以針對同一份輸入提供總行數、空白行數以及最長行的長度。
如何為每一行大型文字加上前綴
無論輸入是二十行還是二十萬行,流程都一樣,因為一旦按下「產生」,所有處理都在單次操作內完成。
- 把你想要裝飾的行貼上或輸入到輸入區。可接受最多一百萬字元,因此針對任何現實中你會手動編輯的行清單,單次貼上就已足夠。
- 輸入前綴、後綴,或兩者都輸入。每個最多 200 個 Unicode 字元,而且兩者中至少要有一個不是空白,如此工具才會拒絕單純回傳輸入內容的要求。
- 選擇是否要將只含空白的行維持不變。開啟時,空字串與只含空白的行會原樣保留;關閉時,每一個邏輯行,包括空行與只含空白的行,都會被裝飾。
- 按下「產生」以取得精確轉換後的字串。預覽會在保留縮排與空白的預格式化區塊中顯示裝飾後的結果,同時允許過長的行以視覺方式換行。
- 將預覽與原始來源比對,然後以 UTF-8 TXT 檔案下載結果。Blob 會標示為 UTF-8 純文字,內容僅包含產生的字串,不含位元組順序記號、富文字格式,或由檔名衍生的前綴。
如果你的輸入原本來自 Windows 記錄檔或傳統 Mac 的文字匯出,想在 下載前確認行尾結尾的處理方式,「換行符號轉換器」可以顯示來源中精確的位元組序列。對於大型檔案,這個確認步驟值得做一次,因為工具的標準化作業是靜默進行的,並沒有額外的「已標準化」預覽。
字面前綴與後綴字串
前綴與後綴輸入最重要的特性在於它們會被視為字面字串。它們不是正則表達式、取代代記號、Markdown、HTML,也不是樣板語法。反斜線、錢號、星號、括號、方括號、引號,都會依原樣進入輸出,不會進行跳脫,也不會展開反向引用。這聽起來很平凡,但別忘了其他常見工具的驚喜:一個不小心就會比對所有字元的句點、會吃掉第一個捕捉群組的 dollar-one,或是落到相容編輯器後立刻被套上標題樣式的 Markdown 標題。
正是這種字面行為讓工具在實際裝飾大型行清單時變得可預期:SQL 片段、shell 註解、記錄檔標籤、清單符號、HTML 分隔符號以及引號字元。一個常見的模式是用單引號或反引號包住識別碼,這也是下表展示典型大型文字情境下輸入與輸出樣貌的原因。
| 使用情境 | 前綴 | 後綴 | 輸入範例 | 輸出範例 |
|---|---|---|---|---|
| SQL IN 子句的值 | ' | ', | 102310421099 | '1023','1042','1099', |
| 腳本中的 shell 註解 | # | (空白) | echo startedexit 0 | # echo started# exit 0 |
| Markdown 符號清單 | - | (空白) | milkbreadeggs | - milk- bread- eggs |
| 記錄檔嚴重性標籤 | [INFO] | (空白) | user signed incache miss | [INFO] user signed in[INFO] cache miss |
上述前綴都不會被解讀。[INFO] 中的方括號仍然是方括號,'1023', 中的單引號仍然是單引號,# echo started 中的井字號仍然是井字號。如果你希望進行的是實際比對並取代行內子字串的轉換,那是另一種工作,需要使用字面子串比對,而本工具並不提供此功能。
空白行、行尾換行與空白字元政策
有一個開關控制空白行與只含空白的行要如何處理,而這個選擇比看起來更重要,因為它決定了實際被裝飾的行數。
| 空白行設定 | 空行 | 只含空白的行 | 非空白行 |
|---|---|---|---|
| 保留空白行不變 (開啟) | 原樣保留 | 原樣保留,並保留其空白 | 以前綴和後綴加以裝飾 |
| 為每一行套用前綴和後綴 (關閉) | 以前綴和後綴加以裝飾 | 以前綴和後綴加以裝飾 | 以前綴和後綴加以裝飾 |
有一個細節會讓人在首次裝飾大型檔案時踩到:輸入結尾的換行字元會產生最後一個空白邏輯行。當啟用「保留空白行不變」時,最後一行會保留為空白,使檔案結尾保持可見。當關閉該選項時,最後一個空白行會跟其他行一樣被裝飾,因此結果會以前綴、後綴和 LF 作為結尾。這個選擇不會刪除任何一行,但會改變最終邊界是要被裝飾,還是保留為乾淨的分隔符號。
值得列舉的是這個工具「不會」做的事情,因為這些省略都是刻意的:它不會修剪每行的開頭或結尾、不會合併內部空白、不會改變大小寫、不會移除定位點 (tab),也不會去除重複的值。如果輸入含有你想保留的前置空白,工具就會保留下來;如果輸入含有重複的行,輸出也會以相同的順序保留相同的重複。這樣的可預期性,正是讓工具能融入已經信任輸入格式的管線之中的原因。
Downloading and Reusing the Result
The generated string is exposed as a Blob labeled UTF-8 plain text, and the browser downloads it through a local URL that is revoked the moment you edit the input, the prefix, the suffix, or the blank-line setting. That revocation matters because it stops an older decorated version from staying downloadable after the controls describe something different. The file itself contains only the generated string — no byte-order mark, no rich-text styling, no spreadsheet quoting, no CSV escaping, no filename-derived prefix, and no automatic delimiter detection.
That last clause is the one to plan around. If the next step in your pipeline expects a particular escaping style, the result will not invent it for you. A SQL loader that needs backslash-escaped single quotes inside the wrapped values, a CSV consumer that expects doubled quotation marks around embedded quotes, and a JSON array that wants each value escaped with a backslash all require their own escaping pass. Run this tool for the prefix and suffix, then run a format-specific escaper for the inside of the line. Separating the two steps keeps the decoration predictable and the escaping correct.
The internal mechanics rely on standard browser primitives. According to MDN's documentation on the Blob interface, a Blob represents a file-like object of immutable raw data that can be read as text or binary and assigned a MIME type, which is exactly how the UTF-8 TXT download is constructed without ever round-tripping through a server. The string manipulation itself uses native JavaScript string operations, and the only normalization step is the line-ending conversion that turns CRLF and CR into LF before the prefix and suffix are joined back in.
For a deeper look, see Bash Add Quotes to Each Line: Sed, Awk, and Xargs.