删除特定单词后的所有空格

Jam*_*ord 5 text-processing

我正在尝试使用正则表达式删除特定单词后的所有空格。我使用的编辑器是 Notepad++ 但可以使用 Unix

在这种情况下,我可以通过运行 regex \VALUES 来突出显示 VALUES,但我不确定在此之后如何删除空格。

Kus*_*nda 8

使用sed

$ sed 's/VALUES[[:blank:]]*/VALUES/g' input >output
Run Code Online (Sandbox Code Playgroud)

这将用 替换VALUES后跟任意数量的空格字符(空格或制表符)VALUES,即它将删除空格。

如果是很重要的VALUES匹配作为一个完整的词,即whateverVALUES匹配的,然后插入一个(开始-OF-)字边界模式之前VALUES

$ sed 's/[[:<:]]VALUES[[:blank:]]*/VALUES/g' input >output
Run Code Online (Sandbox Code Playgroud)

我将在本答案的其余部分忽略这一点。

对于更复杂的 值VALUES,不必键入两次可能会很方便:

$ sed 's/\(VALUES\)[[:blank:]]*/\1/g' input >output
Run Code Online (Sandbox Code Playgroud)

这将保存VALUES模式并在替换中重用它。

如果模式VALUES存储在 shell 变量中$values

$ sed "s/\($values\)[[:blank:]]*/\1/g" input >output
Run Code Online (Sandbox Code Playgroud)

这或多或少地直接传输到 Vim 编辑器中:

:%s/\(VALUES\)[[:blank:]]*/\1/
Run Code Online (Sandbox Code Playgroud)

由于我从未使用过 Notepad++,所以我只能猜测如何使用它。人们显然应该能够按Ctrl+H并输入搜索/查找和替换模式。

搜索模式可能是,(VALUES)[[:blank:]]*而替换模式可能$1。我没有办法测试这个,抱歉。如果[[:blank:]]不起作用,请尝试使用[\t ].

  • @MhdWissamAl-Roujoulah 确实会。这是不必要的。但是确定是使用 `+` 还是 `\+` 代替 `*` 所花费的额外时间比执行一些额外替换所花费的时间要长,最终结果将是相同的。 (4认同)
  • 它也可能会捕捉到以 VALUES 结尾的单词(尽管 LVALUES 是我唯一能想到的)。 (2认同)

Wis*_*lah 2

使用sed

sed -e 's/VALUES \+/VALUES/'
Run Code Online (Sandbox Code Playgroud)

用于+匹配后面的所有空格VALUES