【问题标题】:Counting trailing white spaces计算尾随空格
【发布时间】:2013-09-30 06:37:40
【问题描述】:

我需要帮助创建一个使用 sed 命令计算尾随空格的 sed 脚本。

我可以使用sed -n '$=' 来计算一行中的单词,但是对于空格和尾随空格我该怎么做呢?

bash 的新手,所以我很感激我能得到的任何帮助,
谢谢

*编辑:*

我必须为此使用sed,如果我只想打印行(带有尾随空格)而不是计算它们怎么办?

我可以使用p 并这样做吗:

sed  '/  /p' space.sed

不知道如何表示两个连续的空格,我会有一个没有前导空格的文件,所以这会检测到尾随空格。

【问题讨论】:

  • sed 命令不计算一行字数。
  • 有可能,但不要。 Sed 只处理字符串,它没有数字或计数的概念。
  • 根据grymoire.com/Unix/Sed.html#uh-48sed -n '$=' 统计一个文件的行数
  • 这是awk 的工作,为什么不使用它呢?你的系统是否只有sed

标签: linux bash sed


【解决方案1】:

sed -n '$='不是

计算一行中的单词

它打印文件中最后一行的行号。所以它会计算文件中的行数。

这可以计算每行中的尾随空格。 (如果你想要它们的总和,那真的很容易。)

 awk '{t=length($0);sub(" *$","");print t-length($0)}' file

例如,我有一个文件(命名为f),其内容如下,(结尾的“点”不存在,仅用于显示尾随空格)。

aaaaa     .
bbbbb    .
ccccc   .

上面的 awk 单行代码:

kent$  awk '{t=length($0);sub(" *$","");print t-length($0)}' f
5
4
3

编辑

因为sed 是解决这个问题的必要条件(我不明白为什么,除非它是一个家庭作业)。此行可满足您的需要,请注意,GNU Sed 是必需的:

kent$   sed -r 's/(.*\S)( *$)/expr length "\2"/ge'  f                                                                                                                        
5
4
3
  • 在上面的 sed 行中,只使用了 sed expr 不能算作工具,对吧?那么它可以称为“单独的 sed”解决方案吗?
  • 不管怎样,你是想用锤子拧螺丝。

我刚刚在您的问题中看到了更新,如果您只想打印带有尾随空格的行,那会容易得多:(IMO,grep 将是最好的工具)

 sed -n '/ \+$/p' file

会的。

【讨论】:

  • 感谢您的帮助,您的解决方案效果很好。我需要用 sed 来做。您能否详细说明如何使用 sed 计算空格或尾随/前导空格并解释使用 sed 的解决方案?
  • @Charly 为什么是“sed”?无论如何,你可以用 sed 和其他工具来做吗?像bcwc 甚至是小的 bash 脚本?还是只能使用 sed 单线?
  • 我可以像你提到的那样使用带有 sed 的工具,如果你能解释一下 wc/bc 的方法,那就太好了。我只是想看看一种方法可以单独使用 sed 来更好地理解,因为我是这种语言的新手
  • 这是一个家庭作业的一部分,它显示只包含尾随空格的行,我在编辑 (2) 中重新指出了这一点。很抱歉让它变得比原本应该的更复杂。
  • @Charly 我为您的编辑添加了一个 sed 解决方案 (2)。检查我答案的结尾部分。
猜你喜欢
  • 1970-01-01
  • 2014-04-25
  • 2016-10-21
  • 2015-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多