Shell-Script
文本處理腳本:僅當整個模式匹配時才刪除一組行
只有當整個模式匹配時,我才想刪除一組行(全域)。
圖案說明:
第 1 行:
^[#]+ .*
第 2 行:
^[[:space:]]*$
第 3 行:
^-[[:space:]]*$
第 4 行:
^[[:space:]]*$
第 5 行:
^[#]+ .*$|^[-]+[[:space:]]*$
注意:
- Line3 後面可以有空格
-
- Line2 和 Line4 可能有空格字元或應為空白
- 第 5 行,匹配
^[#]+ .*$
或^[-]+[[:space:]]*$
- 我不想刪除模式的最後一行,即
Line5
模式描述中的。範例:
# Body - Inside Body # Summary - # Bibliography - Read this book
預期輸出:
# Body - Inside Body # Bibliography - Read this book
注意:提供的解決方案有效,是否可以更清楚地編寫如下:
e = '(^|\n)[#]+ .*\ \n[\t ]*\ \n-[\t ]*\ \n[\t ]*\ \n([#]+ .*|[-]+[\t ]*)\n'
此外,我們如何為多行模式的多次出現提供提供的解決方案?
python 解決方案,應該適用於 python2 或 3。從標準輸入讀取,輸出到標準輸出。我做的唯一一件事就是將表達式更改為
[[:space:]]
to[\t ]
。#!/usr/bin/python3 import sys import re e='(^|\n)[#]+ .*\n[\t ]*\n-[\t ]*\n[\t ]*\n([#]+ .*|[-]+[\t ]*)\n' print(re.sub(e, '\\1\\2\n', sys.stdin.read()))