【问题标题】:Remove Leading Whitespace from File从文件中删除前导空格
【发布时间】:2009-12-20 07:00:26
【问题描述】:

我的 shell 在我的 .login 文件中调用了“fortune”,为我提供当天的小消息。然而,有些命运以一个前导空白行开始,有些从两个开始,有些根本没有任何前导空白行。这让我很烦。

我坐下来用我自己的 shell 脚本来包装 fortune,它会从输入中删除所有前导空格,而不会破坏实际 fortune 的任何格式,这可能是故意包含空格的行。

这似乎不是一个简单的两分钟解决方案,当我阅读(reed)sed 和 grep 的手册页时,我想我会在这里问我们出色的顾客。

【问题讨论】:

  • 您能否明确地展示一个财富样本,并指出您想要更改哪些部分以及您认为哪些部分是不应该更改的格式。

标签: sed grep whitespace


【解决方案1】:

使用与 Dav 相同的来源:

# delete all leading blank lines at top of file
sed '/./,$!d'

来源:http://www.linuxhowtos.org/System/sedoneliner.htm?ref=news.rdf

此外,这就是它起作用的原因:

逗号分隔操作的“范围”。 sed 可以接受范围定义的正则表达式,所以/./ 匹配第一行带有“任何东西”(.),$ 指定文件的结尾。因此,

  • /./,$ 匹配“文件末尾的第一个非空行”。
  • ! 然后反转该选择,使其有效地成为“文件顶部的空白行”。
  • d 删除这些行。

【讨论】:

  • 完美!!非常感谢!该链接将来也将非常有用。
  • 为了让它与我需要处理的大约 30K java 文件一起工作,我运行了 "find . -name '*.java' | xargs -n 1 sed -e '/./,$ !d' -i .bak" -- "-n 1" 是 sed 正常工作所必需的
【解决方案2】:
# delete all leading blank lines at top of file
sed '/./,$!d'

来源:http://www.linuxhowtos.org/System/sedoneliner.htm?ref=news.rdf

只需将财富的输出输入其中:

fortune | sed '/./,$!d'

【讨论】:

    【解决方案3】:

    怎么样:

    sed "s/^ *//" < fortunefile
    

    【讨论】:

    • 为什么这被否决了?这就是我阅读 OP 请求的方式。
    【解决方案4】:

    我不确定你的财富信息实际上是什么样子,但这里有一个插图

    $ string="       my message of the day"
    $ echo $string
    my message of the day
    $ echo "$string"
           my message of the day
    

    或者你可以使用 awk

    echo "${string}" | awk '{gsub(/^ +/,"")}1'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多