如何在两个特殊字符后对文本进行 grep?

Rhe*_*hea 4 command-line text-processing

我想在>&之后 grep 数据 |。我使用了这个命令:

grep -o '  |.*$'| cut -c5-
Run Code Online (Sandbox Code Playgroud)

但它只是在以下之后提供数据|

                                                              > Aminobenzoate
Asthma                                                        | Atrazine
Autoimmune thyroid disease                                    | Bacterial
B cell receptor signaling pathway                             | Benzoate
Bile secretion                                                | beta-Lactam
                                                              > Biosynthesis
Caffeine metabolism                                           | Caprolactam
Calcium signaling pathway                                     | Carbapenem
Run Code Online (Sandbox Code Playgroud)

期望的输出:

Aminobenzoate
Atrazine
Bacterial
Benzoate
beta-Lactam
Biosynthesis
Caprolactam
Carbapenem
Run Code Online (Sandbox Code Playgroud)

Phi*_*pos 5

我建议使用sed

sed 's/.*[|>] *//'
Run Code Online (Sandbox Code Playgroud)

这适用于您的示例,但您可能需要对其进行调整,具体取决于如何处理没有任何|>. 如果这些应该被完全删除,请使用

sed -n 's/.*[|>] *//p'
Run Code Online (Sandbox Code Playgroud)

这意味着默认情况下不输出(选项-n),但p如果s命令可以执行替换,则打印一行()。


Ter*_*nce 5

awk也可以使用。您可以通过使用多个字段分隔符-Fawk获得这两个>|。也可以使用该sub选项清除打印匹配列时出现在文本之前的第一个前导空格:

 awk -F'[>|]' '{sub(/^\ /, "",$2); print $2}' file.txt
Run Code Online (Sandbox Code Playgroud)

  • 您可以将空格滚动到字段分隔符中,并避免使用 `sub` 例如 `awk -F'[<|>] *' '{print $2}'` (3认同)