删除文件中每行的空格直到每行末尾

删除文件中每行的空格直到每行末尾

我试图删除每行中的空格,直到文件中每行的最后一个单词。

输入文件示例:

808 0    C01124       Amazon            45/234Birch         00             YYY
808 0    C01184       Flipkart          45/234Lotus         01             YYY
808 0    C01186       PrimeTime         45/23XCCCCH         08             YYY
808 0    C01125       DMART             5/23PPPPPPP         09             YYY

格式有点像上面的,空格不均匀,最后一个词总是“YYY”。我的要求是:我想保留 YYY 后面的空格,但我想删除所有其他空格。

期望的输出:

8080C01124Amazon45/234Birch00YYY
8080C01184Flipkart45/234Lotus01YYY
8080C01186PrimeTime45/23XCCCCH08YYY
8080C01125DMART5/23PPPPPPP09YYY

我尝试过使用sedtr命令,但它变得一团糟,所有行都变成了一行。我想像上面那样隔离,但我无法达到要求。我该怎么做?

答案1

有很多种方法。最明显的,至少对我来说,是在 sed 中使用循环。

 sed  -e :loop -e 's/  *\(.*YYY\)/\1/;t loop'

(第一个斜杠后有两个空格)。只是:loop一个标签。匹配s/ *\(.*YYY\)/\1/一个或多个空格,后跟一些内容,然后是 YYY,并将其替换为不带前导空格的相同内容。如果发生替换,请t loop查看标签。每次循环时,它都会删除 YYY 之前的一块空格。没有任何内容触及 YYY 之后的空格或其他任何内容。

答案2

perl

perl -pe 's{\s.*YYY}{$& =~ s/\s//gr}e'

YYY将删除包含 的行最右边出现的左侧的所有 ASCII 空白字符YYY

答案3

awk '{$1=$1}1' OFS= your_file

这就是您所需要的。分配给一个字段(在这种情况下是第一个)会带走所有额外的内容,并且空的 OFS 将这些字段缝合在一起,没有任何东西将它们分开。

答案4

这是您似乎在问的问题的答案:

sed 's/ *\([^ ]\)/\1/g'

这假设您只处理普通空格,而不是制表符。它查找一串空格,后跟一个非空格字符,然后将其替换为非空格字符。它在全球范围内执行此操作(在每条线上尽可能多次)。这将删除所有空格,除了行尾的空格(最后一个单词之后),因为它们后面没有非空格字符。

无论最后一个词是什么(不一定是YYY),这都有效。仅包含空格的行将不改变地通过。


如果你确实想删除全部空间,使用更简单的答案之一来做到这一点。

相关内容