去除第一个空格到行尾

Imr*_*ran 1 regex textmate

我正在尝试使用查找和替换正则表达式将 TextMate 中文本文件每一行的第一个空格剥离到行尾。

例如,我想替换以下行:

One, 2, Three!
Run Code Online (Sandbox Code Playgroud)

和:

One,
Run Code Online (Sandbox Code Playgroud)

我看过这个问题,但我真的不明白如何使用公认的答案。它似乎匹配整行,而不是第一个空格。

我是否需要使用后视来匹配第一个空格?

我开始尝试:

^([^\s]*)\s.+$
Run Code Online (Sandbox Code Playgroud)

如果有空格,则匹配整行,但如果行上没有空格,则一次匹配两行。

当我有正确的正则表达式时,我是否只需将它放在“查找”框中并点击“全部替换”,“替换”框为空白?我也不太明白回答者在我链接到的问题中谈论的“替换模式”语法。

谢谢。

编辑 2018 年 8 月 9 日:这似乎得到了一些看法。如果有人希望使用命令行工具执行此操作,您可以尝试:

awk '{print $1}' myfile.txt > output.txt
Run Code Online (Sandbox Code Playgroud)

或者写回同一个文件,你可以这样做:

awk '{print $1}' myfile.txt | sponge myfile.txt
Run Code Online (Sandbox Code Playgroud)

这将在任何空格(包括制表符)之前取第一列。要专门在空格上拆分:

cat myfile.txt | cut -d ' ' -f 1 > output.txt
Run Code Online (Sandbox Code Playgroud)

Ara*_*Fey 5

没有一个正确的正则表达式。有很多方法可以做到这一点。您可以使用后视,但没有必要。如何实际使用正则表达式还取决于模式的设计方式 - 您可能必须什么都不用替换,或者您可能必须用比正则表达式模式本身更复杂的花哨文本替换。


可能最容易使用的模式是.*(?:\n|$)- 用空替换。(注意点前面的空格。)

另一个是^(.*?) .*?$,它需要多行修饰符才能工作。这个使用起来比较棘手:你必须用\1. 此替换模式引用由正则表达式捕获的文本 - 在本例中,是直到第一个空格的所有文本。如果省略此项,则所有包含空格的行都将被删除。