【问题标题】:remove spaces from logged filename从记录的文件名中删除空格
【发布时间】:2017-03-15 14:29:26
【问题描述】:

在一台 linux 机器上,我试图从一些详细列出文件列表的日志条目中删除空格。

IE: /path/to/some/file 有空格.file

但是,在这些行中有很多其他文本,我希望保留空白以保持一致的格式。

我尝试使用 sed,但对如何构建正则表达式非常不熟悉。

sed -e 's/ *\/\.//g' file.log

【问题讨论】:

  • 你能显示那个文件的一些片段吗?
  • Tue Mar 14 06:15:20 2017 62065 /EXTRACTS/Principal Payments - 03072017 - 2 - 64606 - EN.PDF 在文件扩展名之后也会有一些我不想删除的内容.
  • 现在,同一行,但更换后,请
  • 2017 年 3 月 14 日星期二 06:15:20 62065 /EXTRACTS/PrincipalPayments-03072017-2-64606-EN.PDF

标签: linux sed


【解决方案1】:

使用 sed,在找到第一个 / 之后删除空格:

sed ':a;s/\(\/[^ ]*\) /\1/;ta;' file.log

工作原理:

  • \(\/[^ ]*\):在第一个 / 之后,非空格字符被捕获到(但不包括)下一个空格。使用反向引用输出捕获组。
  • ta:如果之前的替换成功,ta 循环标记a 以处理剩余的空格

编辑:

删除从/ 到下一个. 的空格:

sed ':a;s/\(\/[^ .]*\) /\1/;ta;' file.log

或在 ERE 模式下避免转义括号:

sed -r ':a;s/(\/[^ .]*) /\1/;ta;' file.log

【讨论】:

    【解决方案2】:

    GNU sed

    sed -r ':a;s#(.*/.*) #\1#;ta' file.log
    

    【讨论】:

    • 虽然此代码可以回答问题,但提供有关 如何 和/或 为什么 解决问题的附加上下文将改善答案的长期价值。提及为什么这个答案比其他答案更合适也没有什么坏处。
    • 有没有办法让它在遇到句点/点时停止删除空格?这可行,但它会删除文件扩展名后的空格,这会导致我错过其他有价值的信息。
    • echo Tue Mar 14 06:15:20 2017 62065 /EXTRACTS/本金支付 - 03072017 - 2 - 64606 - EN.PDF a b c |sed -r ':a;s#(.*/[ ^.]*) #\1#;ta'
    • @AlexCarman 您可能会在这里看到与我的回答有些相似之处。随意测试它。
    猜你喜欢
    • 1970-01-01
    • 2015-04-11
    • 2013-05-02
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 2012-07-01
    相关资源
    最近更新 更多