Linux 从记录的文件名中删除空格

Linux 从记录的文件名中删除空格,linux,sed,Linux,Sed,在linux机器上,我试图从一些详细列出文件列表的日志条目中删除空格 IE:/path/to/some/file有空格。file 但是,在这些行中还有很多其他文本,我希望保留空白以保持格式一致 我尝试使用sed,但我对如何构造正则表达式非常不熟悉 sed -e 's/ *\/\.//g' file.log 使用sed,要在找到第一个/后删除空格,请执行以下操作: sed ':a;s/\(\/[^ ]*\) /\1/;ta;' file.log 工作原理: \(\/[^]*\):在第一个/之

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

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

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

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

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

使用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
GNU sed

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

你能展示一下那个文件的一些片段吗?2017年3月14日星期二06:15:20 62065/EXTRACTS/Principal Payments-03072017-2-64606-EN.PDF文件扩展名后也会有我不想删除的内容。现在,相同的行,但在替换之后,请参见2017年3月14日06:15:20 62065/EXTRACTS/principayments-03072017-2-64606-EN.pdf尽管此代码可能会回答此问题,但提供有关如何和/或为什么解决此问题的附加上下文将提高答案的长期价值。提到为什么这个答案比其他答案更合适也没什么坏处。一旦遇到句号/点,有没有办法让它停止删除空格?这是可行的,但它会删除文件扩展名后的空格,这会导致我错过其他有价值的信息。echo Tue Mar 14 06:15:20 2017 62065/EXTRACTS/Principal Payments-03072017-2-64606-EN.PDF a b c | sed-r':a;s#(.*/[^.]*)#\1#;阿列克斯卡曼,你可以在这里看到我的回答有一些相似之处。请随意测试它。