Shell-Script
使用 sed 從表達式中刪除字元
我在表單中有一個字元串
- >
|a 一些文本、字母或數字。| 一些其他文本字母或數字 |b 文本的一些其他部分 |c 一些其他字母或數字
請注意,條形可以單獨存在,如“數字。|其他”或帶有字元“|a”、“|b”、“|c”等,可能一直到“|z”
但這也可能是
- >
|a 沒有任何其他條的標題
換句話說,柱的數量是未知的。
我需要找到兩個與 sed 一起使用的正則表達式:
- 第一個,查找 |a 和 |b 或 |b 和 |c 之間的所有文本,依此類推
在 1) 中,例如,
查找 a| 之後的所有文本 但在 b| 之前,產生:
一些文字、字母或數字。| 其他一些文字字母或數字
查找 b| 之後的所有文本 但在 c| 之前,在上面的範例中產生:
文本的其他部分
- 需要第二個表達式來查找 |a 之後的所有文本,但不是在 |b 處停止,而是簡單地刪除任何條,單獨刪除 (|),或使用另一個字元 |a、|b、|c 等。
在 1) 例如:
一些文本、字母或數字 一些其他文本 字母或數字 文本的一些其他部分 一些其他字母或數字
假設 GNU 實用程序和一個數據文件
data
,
grep -Po '(?<=\|a).*(?=\|b)' data
Some text, letters or numbers. | Some other text letters or numbers
sed -r -e 's/^.?*\|a//' -e 's/\|[a-z]?//g' data
Some text, letters or numbers. Some other text letters or numbers some other part of text some other letters or numbers Title without any other bars
根據需要將and更改為and
|a
等。|b``|c``|d
請注意,這些都不會刪除標記周圍的空格
|x
,因此您的文本有一個前導空格和一個尾隨空格(兩者都不能在此處顯示)。如果您也希望將其刪除,則需要將其作為模式的一部分包含在內:grep -Po '(?<=\|a ).*(?= \|b)' data sed -r -e 's/^.?*\|a ?//' -e 's/ ?\|([a-z] ?)?//g' data
如此處所寫,該
sed
命令會將小節連接在一起。如果您希望它們之間有空格,只需//
將末尾的 更改為/ /
.