【问题标题】:remove white space from the end of line in linux [duplicate]从linux中的行尾删除空格[重复]
【发布时间】:2013-12-29 14:04:39
【问题描述】:

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

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

我使用了sed 's/$\s//',但它不起作用。

【问题讨论】:

  • 我认为命令应该是sed 's/\s*$//'$ 指定行尾锚点,因此每行后面都没有。
  • right $ 定义对象的结束(工作缓冲区),所以结束后没有任何内容。出于同样的原因,开头 (^) 之前没有任何内容,因此任何模式都将 ^ 作为第一个元素(如果存在),如果存在则将 $ 作为结尾(为了符合 POSIX,当使用像 | [逻辑 OR] 之类的操作时不正确)

标签: linux sed


【解决方案1】:

试试这个:

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

在 OS X 上:

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

【讨论】:

  • 谢谢你,这正是我所需要的。
  • 这对我在带有 GNU sed 的 OSX 上不起作用。
【解决方案2】:

使用简单的空白*[: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!

【讨论】:

  • 只是好奇:这适用于\t 和类似的空白字符吗?用[:space:]怎么样?
  • 问得好,@HermanTorjussen。为此,我注意到您必须使用 [[:space:]]
  • 字符类 [:space:] 包含所有空格(包括换行符和回车) -- [:blank:] 只是水平空格(空格和制表符) -- 请参阅en.wikipedia.org/wiki/Regular_expression#Character_classes
  • 我应该做:sed 's/[[:blank:]]*$//' file > file更新文件? @fedorqui
  • @alper nop, whatever file > file 将不可避免地截断file。您可以使用sed -i.bak '...' file 执行就地编辑,也可以使用sed '...' file > new_file
【解决方案3】:

尝试使用

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

【讨论】:

    【解决方案4】:

    这可能对你有用(GNU sed):

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

    这会在行尾查找空格,如果存在则将其删除。

    【讨论】:

      【解决方案5】:

      如果您的线条与您描述它们的方式完全相同(没有前导或嵌入空格),那么以下内容也应该可以使用

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

      【讨论】:

      • 可以缩短为awk '{$1=$1}1' file.txt
      【解决方案6】:
      sed -i 's/[[:blank:]]\{1,\}$//' YourFile
      

      [:blank:] 用于空格,主要是制表符和 {1,} 用于排除替换过程的“末尾没有空格”(如果行短且文件小,则影响不大)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 2015-02-15
        • 1970-01-01
        • 1970-01-01
        • 2013-07-20
        • 1970-01-01
        相关资源
        最近更新 更多