我的虚拟文本文件(一个连续的行)如下所示:
AAChvhkfiAFAjjfkqAPPMB
我想:
我是怎么做到的:
要剪切所需位置的部分文字(从5到7个字符,从10到14个字符),我使用cut
echo 'AAChvhkfiAFAjjfkqAPPMB' | cut --complement -c 5-7,10-14
AAChfifkqAPPMB
但我真的不知道如何复制粘贴文字。例如:将文本从15个字符复制到18个字符并将其粘贴到字符1之后(也使用上一个剪切命令)。为了得到这样的最终结果:
fkqAAAChfifkqAPPMB
所以我不得不提问:
答案 0 :(得分:1)
也许是这样的:
$ echo AAChvhkfiAFAjjfkqAPPMB | awk '{ print(substr($1, 0, 14) substr($1, 18) substr($1, 15, 3)) }'
AAChvhkfiAFAjjAPPMBfkq
答案 1 :(得分:1)
在perl中,您可以使用数组切片,在数组中拆分字符串:
my $string = "AAChvhkfiAFAjjfkqAPPMB1";
my @arr = split //, $string;
和切片(打印元素5到7和10到14):
print @array[5..7,10..14];
您也可以使用splice()重新排列数组。
perldoc说:从数组中删除OFFSET和LENGTH指定的元素,并将其替换为LIST的元素(如果有)。
答案 2 :(得分:1)
在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
有关详细信息,请参阅http://perldoc.perl.org/functions/substr.html。 splice()也可能是候选人。
答案 3 :(得分:1)
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
修改强>
要反转文本部分,您只需要交换t
和$i
:
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",$i,t);
$0=t""$0}1' OFS="" FS=""
AqkfAAChfifkqAPPMB