sed:如何在正則表達式中插入換行符?
我正在嘗試格式化文本文件。現在它通常看起來像這樣:
s ApartCD Compact DiscCD-ROM Compact Disc-Read-Only MemoryCD-RW Compact Disc-RewritableCDFS Compact Disc File SystemCERT Computer Emergency Response TeamCFS 中央文件系統、通用文件系統或命令文件系統ACRONYM SPELLED OUTCGA Computer Graphics and ApplicationsCIDR Classless Inter-Domain RoutingCIFS通用網際網路文件系統CMOS互補金屬氧化物半導體CNR通信和網路RiserCOMx通信埠(x=埠號)CPU中央處理器CRT陰極射線管DaaS數據即服務DAC自由訪問控制DB-25串列通信D-Shell連接器,25針DB-9串列通信 D 殼連接器,9 針DBaaS 數據庫即服務 DC 直流直流 DDoS 分佈式拒絕服務DDR 雙倍數據速率DDR RAM 雙倍數據速率隨機存取儲存器DFS 分佈式文件系統DHCP 動態主機配置協議DIMM 雙列直插式記憶體模組DIN Deutsche Industrie NormDLT 數字線性磁帶DLP 數字光P
這只是我複制的一個樣本。首先,我想在每個小寫字母實例之間插入一個換行符,然後緊跟一個大寫字母。我通過閱讀 GNU sed 手冊發現我可以使用括號範圍
[:lower:]
,並且[:upper:]
為此,(我認為[[:lower:]]+[[:upper:]]
是正確的模式)但我還沒有確定正確的命令或通用語法來完成這項工作。我找到了幾個用於附加換行符的命令,但沒有找到用於將它們插入正則表達式的命令。這是我第一次使用 sed。我不知道這是否是這項工作的最佳工具。非常感謝任何幫助,如果不是太麻煩,請解釋你的命令,這樣我也許可以學到一些東西,而以後不必打擾任何人。謝謝你。
使用 GNU sed 試試這個:
$ sed 's/\([a-z]\+\)\([A-Z]\)/\1\n\2/g' text.txt
對於您的輸入,它會產生:
s Apart CD Compact Disc CD-ROM Compact Disc-Read-Only Memory CD-RW Compact Disc-Rewritable CDFS Compact Disc File System CERT Computer Emergency Response Team CFS Central File System, Common File System, or Command File System ACRONYM SPELLED OUTCGA Computer Graphics and Applications CIDR Classless Inter-Domain Routing CIFS Common Internet File System CMOS Complementary Metal-Oxide Semiconductor CNR Communications and Networking Riser COMx Communication port (x=port number)CPU Central Processing Unit CRT Cathode-Ray Tube Daa S Data as a Service DAC Discretionary Access Control DB-25 Serial Communications D-Shell Connector, 25 pins DB-9 Serial Communications D-Shell Connector, 9 pins DBaa S Database as a Service DC Direct Current DDo S Distributed Denial of Service DDR Double Data Rate DDR RAM Double Data Rate Random Access Memory DFS Distributed File System DHCP Dynamic Host Configuration Protocol DIMM Dual Inline Memory Module DIN Deutsche Industrie Norm DLT Digital Linear Tape DLP Digital Light P
一些解釋:
我假設您知道什麼是“擷取組”,因為您了解該模式。
字元串
's/\([a-z]\+\)\([A-Z]\)/\1\n\2/g'
按字元分為 4 部分/
。第一部分
s
是替代的意思。第二部分是圖案。該模式包含兩個擷取組:
[a-z]\+
和[A-Z]
. 以您輸入的單詞“DDoS”為例。第一個擷取組將擷取“o”,第二個擷取組將擷取“S”。整個模式匹配“oS”。第三部分
\1\n\2
將替換模式匹配的字元串。\1
指第一個擷取組[a-z]\+
,在“DDoS”範例中,它是“o”。\2
指第二個擷取組[A-Z]
,在“DDoS”範例中,它是“S”。\n
表示換行符。所以結合在一起你會得到“o\nS”,它將替換匹配的字元串“oS”。第四部分
g
錶示global。如果省略,sed
將找到第一個匹配項,進行替換並退出。使用g
,sed
將搜尋所有匹配的字元串並進行替換。詳細說明可以參考sed 手冊。