如何删除字符串中的特定字符,但前提是 Linux 中该行中没有数字

use*_*129 8 sed centos string replace

我一直被这个看似容易解决的问题难住了……好吧,有一段时间了。

这是我需要编辑的文件的示例输出:

$cat file
George Washington
Geneva Convention
123,281,029 USD
342,019,929 EUR
Run Code Online (Sandbox Code Playgroud)

我需要删除“乔治华盛顿”和“日内瓦公约”之间的空格,而不是“123,281,029 美元”或“342,019,929 欧元”之间的空格。

本质上,我的目标是仅在该行中没有数字时才删除该行中单词之间的空格。

我试图通过 编辑文件grep -v [0-9] $file | sed 's/ //',但唯一可行的方法是我输出到另一个文件,但这意味着从旧文件中排除所有带有数字的行到新文件,这不是我需要的。

我用 grep 尝试了一些非常荒谬的循环,sed但似乎没有任何效果。

同样,这里是文件的示例输出:

$cat file
George Washington
Geneva Convention
123,281,029 USD
342,019,929 EUR
Run Code Online (Sandbox Code Playgroud)

这是我想要的输出:

$cat file
GeorgeWashington
GenevaConvention
123,281,029 USD
342,019,929 EUR
Run Code Online (Sandbox Code Playgroud)

dev*_*ull 15

使用sed

sed '/[0-9]/!s/ //g' filename
Run Code Online (Sandbox Code Playgroud)

这将删除所有不包含数字的行上的空格。

使用awk

awk '!/[0-9]/{gsub(" ", "", $0)};1' filename
Run Code Online (Sandbox Code Playgroud)

仅删除前两个单词之间的空格(此处使用 GNU sedfor -r-E而在 BSD 上使用):

sed -r '/[0-9]/!s/([^ ]+) ([^ ]+)/\1\2/' filename
Run Code Online (Sandbox Code Playgroud)


cuo*_*glm 7

使用perl

perl -ple 's/\s+//g unless /\d/' file
Run Code Online (Sandbox Code Playgroud)