从linux的行尾删除空格

时间:2013-12-11 14:32:50

标签: linux sed

我有文件,其中我想从行尾的test.txt中删除空格如下(行尾有空格。

ath-miRf10005-akr 
ath-miRf10018-akr 
ath-miRf10019-akr
ath-miRf10020-akr 
ath-miRf10023-akr
ath-miRf10024-akr 

我使用了sed 's/$\s//',但它无效。

6 个答案:

答案 0 :(得分:37)

使用简单的空白*[:blank:]*删除该行末尾的所有可能空格:

sed 's/ *$//' file

使用[:blank:]类删除空格和标签:

sed 's/[[:blank:]]*$//' file

注意这是POSIX,因此兼容GNU sed和BSD。

对于GNU sed,您可以使用GNU扩展\s*来匹配空格和制表符,如BaBL86's answer中所述。请参阅Basic Regular Expressions上的POSIX规范。


让我们用一个只包含线条的简单文件来测试它,两个只有空格,最后一个也有标签:

$ cat -vet file
hello   $
bye   $
ha^I  $     # there is a tab here

只删除空格:

$ sed 's/ *$//' file | cat -vet -
hello$
bye$
ha^I$       # tab is still here!

删除空格和标签:

$ sed 's/[[:blank:]]*$//' file | cat -vet -
hello$
bye$
ha$         # tab was removed!

答案 1 :(得分:16)

试试这个:

sed -i 's/\s*$//' youfile.txt

答案 2 :(得分:2)

sed -i 's/[[:blank:]]\{1,\}$//' YourFile

[:blank:]用于空格,主要用于选项卡{1,}以排除替换过程中的“末尾没有空格”(如果行很短且文件很小则没有重大影响)

答案 3 :(得分:1)

如果您的线条与您描绘的线条完全相同(没有前导或嵌入空格),则以下内容应该也可以用作

awk '{$1=$1;print}' file.txt

答案 4 :(得分:0)

这可能适合你(GNU sed):

sed -ri  '/\s+$/s///' file

这会在行的末尾查找空格,如果存在则删除它。

答案 5 :(得分:-1)

尝试使用

cat kb.txt | sed -e 's/\s$//g'