shell脚本。如何使用sed删除文本的中间?

时间:2015-10-20 07:04:55

标签: shell sed

我有文件名1_1.lot.01-APR-2014-07:17.asc_19。我想删除时间戳而不是扩展名。例如,在sed 1_1.lot.asc_19

之后成为这个

怎么做?

3 个答案:

答案 0 :(得分:1)

删除时间戳

     sed  's#\(1_1\.lot\)\(.*\)\(\.asc_19\)#\1\3#'

                  (or)

     sed   's/\([^\.]\+[^\.]\+\).*\(\..*\)/\1\2/'

答案 1 :(得分:0)

试试这个awk版本

awk  -F"."  '{print $1"."$2"."$4}' FileName

替换扩展名

awk  -F"."  '{print $1"."$2".gdf"}' FileName

输出

1_1.lot.asc_19

Sed版本仅删除了时间戳

sed 's/[0-9]\{2\}-[A-Z]\+[^.]\+.//' FileName

答案 2 :(得分:0)

删除时间戳

sed 's/[^.]*\(\.[^.]*\)$/\1/' 

说明:

  • 选择
    • 行尾($末尾)是获取模式的引用,因此从结尾读取正则表达式以便理解
    • \.[^.]*是以点开头的最大内容(\.由于元字符.而被转义)并且在下一个引用之前不会包含点([^.]*) (在这种情况下结束)。在这种情况下,它会给你的扩展
    • \( \)是将内容分组并保留在内存中
    • [^.]*,如前所述,最大的内容没有点(在这种情况下是你的日期)
  • 替代
    • \1是内存插槽1(搜索中的第一个组)的内容,在这种情况下是扩展名。事实上不包括日期。

还将ext asc 更改为 gdf ​​

sed 's/[^.]*\.asc\([^.]*\)$/.gdf\1/'