Regex 剪切并复制粘贴文本的给定位置

Regex 剪切并复制粘贴文本的给定位置,regex,perl,text,sed,awk,Regex,Perl,Text,Sed,Awk,我的虚拟文本文件(一个连续行)如下所示: AAChvhkfiAFAjjfkqAPPMB fkqAAAChfifkqAPPMB 我想: 删除部分文字(具体范围) 在文件中复制粘贴(特定字符范围) 我是如何做到这一点的: 要在需要的位置剪切部分文本(从5到7个字符,从10到14个字符),我使用cut echo 'AAChvhkfiAFAjjfkqAPPMB' | cut --complement -c 5-7,10-14 AAChfifkqAPPMB 但我真的不知道如何复制粘贴文本。例如:

我的虚拟文本文件(一个连续行)如下所示:

AAChvhkfiAFAjjfkqAPPMB
fkqAAAChfifkqAPPMB
我想:

  • 删除部分文字(具体范围)
  • 在文件中复制粘贴(特定字符范围)
  • 我是如何做到这一点的:

    要在需要的位置剪切部分文本(从5到7个字符,从10到14个字符),我使用
    cut

    echo 'AAChvhkfiAFAjjfkqAPPMB' | cut --complement -c 5-7,10-14  
    AAChfifkqAPPMB
    
    但我真的不知道如何复制粘贴文本。例如:将文本从15个字符复制到18个字符,并将其粘贴到字符1之后(也使用上一个剪切命令)。要获得这样的最终结果:

    AAChvhkfiAFAjjfkqAPPMB
    
    fkqAAAChfifkqAPPMB
    
    因此,我必须回答以下问题:

  • 如何使用perl、awk或sed读取给定范围内的文本(从..到)&将此文本粘贴到特定位置
  • 如何将此文本粘贴与上一个剪切命令相结合,因为剪切后的文本将移到左侧,因此将复制错误的文本

  • 也许是这样的:

    $ echo AAChvhkfiAFAjjfkqAPPMB | awk '{ print(substr($1, 0, 14) substr($1, 18) substr($1, 15, 3)) }'
    AAChvhkfiAFAjjAPPMBfkq
    

    也许是这样的:

    $ echo AAChvhkfiAFAjjfkqAPPMB | awk '{ print(substr($1, 0, 14) substr($1, 18) substr($1, 15, 3)) }'
    AAChvhkfiAFAjjAPPMBfkq
    
    在中,可以通过在数组中拆分字符串来使用数组切片:

    和切片(打印元素5至7和10至14):

    您可以使用太来重新排列阵列

    佩尔多克说:

    从数组中删除由偏移量和长度指定的元素,并将其替换为列表中的元素(如果有)

    请参见中的,您可以通过在数组中拆分字符串来使用数组切片:

    和切片(打印元素5至7和10至14):

    您可以使用太来重新排列阵列

    佩尔多克说:

    从数组中删除由偏移量和长度指定的元素,并将其替换为列表中的元素(如果有)


    参见Perl中的

    ,我认为substr是一个很好的候选者

    $a = '1234567890';
    #from pos 2, replace 3 chars with nothing, return the 3 chars
    $b=substr($a,2,3,''); 
    print "$a\t$b\n"; #1267890    345
    #in posistion 0 (first), replace 0 characters (ie pure insert)
    #with the content of $b
    substr($a,0,0,$b);
    print "$a\t$b\n"; #3451267890    345
    
    有关更多详细信息,请参阅。
    splice()也可能是一个候选对象。

    在Perl中,我认为substr是一个很好的候选对象,试试例如

    $a = '1234567890';
    #from pos 2, replace 3 chars with nothing, return the 3 chars
    $b=substr($a,2,3,''); 
    print "$a\t$b\n"; #1267890    345
    #in posistion 0 (first), replace 0 characters (ie pure insert)
    #with the content of $b
    substr($a,0,0,$b);
    print "$a\t$b\n"; #3451267890    345
    
    有关更多详细信息,请参阅。
    splice()也可能是一个候选者。

    使用awk非常简单:

    kent$  echo "AAChvhkfiAFAjjfkqAPPMB"|awk  '
    {for(i=5;i<=7;i++)$i="";
     for(i=10;i<=14;i++)$i="";
     for(i=15;i<=18;i++)t=sprintf("%s%s",t,$i);
     $0=t""$0}1' OFS="" FS=""
    fkqAAAChfifkqAPPMB
    

    awk非常简单:

    kent$  echo "AAChvhkfiAFAjjfkqAPPMB"|awk  '
    {for(i=5;i<=7;i++)$i="";
     for(i=10;i<=14;i++)$i="";
     for(i=15;i<=18;i++)t=sprintf("%s%s",t,$i);
     $0=t""$0}1' OFS="" FS=""
    fkqAAAChfifkqAPPMB
    

    这里的
    1
    是什么意思?另外,我只想说清楚:
    $0=t”“$0
    -组合到序列并将其打印出来(打印t,然后打印$0)。但是如果我想在
    $0
    内打印
    t
    ,该怎么办?如何在
    $0
    字符串中的特定位置打印
    t
    ?Joachim Pileborg的回答bellow使用
    substr()
    -我可以想象使用它来划分最后的
    $0
    并按首选顺序打印,但它们应该是更简单的方法。
    1
    {…}之外
    block的意思是
    print$0
    如果你想在第三个字母后打印t,你可以
    $3=$3”t
    或者
    $3=sprintf(“%s%s”,$3,t)
    我非常喜欢这个解决方案,但问题是:
    awk:超出程序限制:最大字段数size=32767
    -必须使用Joachim Pileborg解决方案(没有最大字段错误)这里的
    1
    是什么意思
    $0=t”“$0}1'
    ?我只想说清楚:
    $0=t”“$0
    -组合到序列并打印出来(打印t,然后打印$0)但是如果我想在
    $0
    中打印
    t
    ?如何在
    $0
    字符串中的特定位置打印
    t
    ?Joachim Pileborg的回答使用
    substr()
    -我可以想象用它来划分最后的
    $0
    并按优先顺序打印,但它们应该是更简单的方法。
    1
    {…}
    块之外意味着
    打印$0
    如果你想在第三个字母后打印t,你可以
    $3=$3”t
    $3=sprint(“%s%s”,“$3,t)
    我非常喜欢这个解决方案,但问题是:
    awk:超出程序限制:最大字段数size=32767
    -必须使用Joachim Pileborg解决方案(没有最大字段错误)