我正在尝试使用查找和替换正则表达式将 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)
没有一个正确的正则表达式。有很多方法可以做到这一点。您可以使用后视,但没有必要。如何实际使用正则表达式还取决于模式的设计方式 - 您可能必须什么都不用替换,或者您可能必须用比正则表达式模式本身更复杂的花哨文本替换。
可能最容易使用的模式是.*(?:\n|$)- 用空替换。(注意点前面的空格。)
另一个是^(.*?) .*?$,它需要多行修饰符才能工作。这个使用起来比较棘手:你必须用\1. 此替换模式引用由正则表达式捕获的文本 - 在本例中,是直到第一个空格的所有文本。如果省略此项,则所有包含空格的行都将被删除。