【问题标题】:Using Grep Sed or Awk to search and replace lines in EDL file使用 Grep Sed 或 Awk 搜索和替换 EDL 文件中的行
【发布时间】:2014-07-04 03:27:46
【问题描述】:

基本上,我正在尝试使用 sed、grep 或 awk 来实现:

001  AX       V     C        00:00:32:09 00:00:40:19 00:00:00:00 00:00:08:10
* FROM CLIP NAME: 001_M04-1008rev.mov

002  AX       V     C        00:00:20:04 00:00:30:11 00:00:08:10 00:00:18:17
* FROM CLIP NAME: 001_M04-1011rev.mov

003  AX       V     C        00:00:15:00 00:00:26:05 00:00:18:17 00:00:29:22
* FROM CLIP NAME: 001_M04-1012rev.mov

004  AX       V     C        00:00:20:01 00:00:30:13 00:00:29:22 00:00:40:10
* FROM CLIP NAME: 001_M04-1027rev.mov

005  AX       V     C        00:00:24:22 00:00:30:09 00:00:40:10 00:00:45:21
* FROM CLIP NAME: 001_M04-1028rev.mov

006  AX       V     C        00:00:38:04 00:00:49:03 00:00:45:21 00:00:56:20
* FROM CLIP NAME: 001_M04-1029rev.mov

到这里:

001  1008rev       V     C        00:00:32:09 00:00:40:19 00:00:00:00 00:00:08:10
* FROM CLIP NAME: 001_M04-1008rev.mov

002  1011rev       V     C        00:00:20:04 00:00:30:11 00:00:08:10 00:00:18:17
* FROM CLIP NAME: 001_M04-1011rev.mov

003  1012rev       V     C        00:00:15:00 00:00:26:05 00:00:18:17 00:00:29:22
* FROM CLIP NAME: 001_M04-1012rev.mov

004  1027rev       V     C        00:00:20:01 00:00:30:13 00:00:29:22 00:00:40:10
* FROM CLIP NAME: 001_M04-1027rev.mov

005  1028rev       V     C        00:00:24:22 00:00:30:09 00:00:40:10 00:00:45:21
* FROM CLIP NAME: 001_M04-1028rev.mov

006  1029rev       V     C        00:00:38:04 00:00:49:03 00:00:45:21 00:00:56:20
* FROM CLIP NAME: 001_M04-1029rev.mov

有什么建议吗?基本上,我取“.mov”之前的最后 7 个字符,并将这些字符移动到前一行的“AX”位置。

【问题讨论】:

    标签: regex search awk sed grep


    【解决方案1】:

    这是使用awk的一种方法:

    awk '{ sub($2, substr($NF, length($NF) - 10, 7)) }1' RS= ORS="\n\n" file
    

    这是使用perl的一种方法:

    perl -00 -pae 's/$F[1]/substr($F[-1], -11, 7)/e' file
    

    请注意,AWK 解决方案会给您一个尾随换行符,而 Perl 解决方案不会。这是否相关是另一回事。

    【讨论】:

    【解决方案2】:

    这是一个潜在的awk 解决方案:

    awk 'BEGIN { buf=""; } /AX/ { buf=$0; } /.mov$/ { match($0, /\-([^\-\.]+).mov/, n); gsub("AX", n[1], buf); print buf,"\n",$0,"\n"; }' < test.txt
    

    输出如下:

    001  1008rev       V     C        00:00:32:09 00:00:40:19 00:00:00:00 00:00:08:10
     * FROM CLIP NAME: 001_M04-1008rev.mov
    
    002  1011rev       V     C        00:00:20:04 00:00:30:11 00:00:08:10 00:00:18:17
     * FROM CLIP NAME: 001_M04-1011rev.mov
    
    003  1012rev       V     C        00:00:15:00 00:00:26:05 00:00:18:17 00:00:29:22
     * FROM CLIP NAME: 001_M04-1012rev.mov
    
    004  1027rev       V     C        00:00:20:01 00:00:30:13 00:00:29:22 00:00:40:10
     * FROM CLIP NAME: 001_M04-1027rev.mov
    
    005  1028rev       V     C        00:00:24:22 00:00:30:09 00:00:40:10 00:00:45:21
     * FROM CLIP NAME: 001_M04-1028rev.mov
    
    006  1029rev       V     C        00:00:38:04 00:00:49:03 00:00:45:21 00:00:56:20
     * FROM CLIP NAME: 001_M04-1029rev.mov
    

    【讨论】:

      猜你喜欢
      • 2011-07-29
      • 1970-01-01
      • 2010-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 2019-06-27
      相关资源
      最近更新 更多