【问题标题】:How to use a cut in a sed statement如何在 sed 语句中使用剪切
【发布时间】:2018-12-16 02:21:47
【问题描述】:

我有这个 sed 声明:

#!/bin/bash

find . -type f ! -name 'checkData' ! -name 'correctData' ! -name 'makeStructure' -exec sed -i "1{s|.*|{}|;s|.*/testarea/||;s|/[^/]*$||;s/[/]/-/g;}" {} \;

目前它完全按照我的需要做,但没有以我想要的格式显示日期:

2000-01-18

它将日期返回为

.-2000-01-18

我一直在尝试找出需要更改的部分以摆脱 .- 但我运气不佳。
有没有办法只从结果中删除前 2 个字符?

提前致谢!

【问题讨论】:

  • 原始字符串是什么样的?
  • 基本上,这用于将本示例中名为“testarea”的父目录中每个文件的第一行从可能具有或不具有空值的日期更改为目录,因此例如,此文件位于 testarea/2000/01/18 中,因此将文件中的日期更改为 2000-01-18 尽管它在开头显示为 ./ 而我只是希望它全部更改为日期跨度>
  • 拥有原始字符串将非常有帮助。在任何情况下,如果您的所有输出都以“.-”开头,您为什么不直接在 sed 脚本中用一个额外的命令杀死它呢?只需添加类似s/^\.-//
  • 或者,如果你想在开头只剪切2个字符,任意两个字符,那么它将是s/^..//
  • 第一段代码正是我所需要的,谢谢!

标签: bash shell unix sed cut


【解决方案1】:

我想你会想在你的find 命令中使用basename:

find . -type f ! -name 'checkData' ! -name 'correctData' ! -name 'makeStructure' \
-exec basename {} \; | \
sed -i "1{s|.*|{}|;s|.*/testarea/||;s|/[^/]*$||;s/[/]/-/g;}"

这应该删除文件名开头的./。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多