Perl 将行的最后一个字符移动到特定列--sed?啊?

Perl 将行的最后一个字符移动到特定列--sed?啊?,perl,sed,awk,Perl,Sed,Awk,我需要替换以特定字符(比如,&)结尾的所有行,这样这个字符应该在特定的列中(比如,80)。 哪种工具最好? 我开始思考sed: sed 's/\(.*\)&/\1 <what should be here??> &/' sed的/\(.*)&/\1&/' 但无法理解如何替换为可变数量的空格,例如&转到第80列。 谢谢 使用/e开关切换到s//,告诉Perl评估替换部分以计算结果 #! /usr/bin/env perl use strict; use warni

我需要替换以特定字符(比如,&)结尾的所有行,这样这个字符应该在特定的列中(比如,80)。 哪种工具最好? 我开始思考sed:

sed 's/\(.*\)&/\1 <what should be here??> &/'
sed的/\(.*)&/\1&/'
但无法理解如何替换为可变数量的空格,例如&转到第80列。
谢谢

使用
/e
开关切换到
s//
,告诉Perl评估替换部分以计算结果

#! /usr/bin/env perl

use strict;
use warnings;

while (<>) {
  s/^(.*)(&)$/$1 . " " x (79 - length $1) . $2/e;
  print;
}
#/usr/bin/env perl
严格使用;
使用警告;
而(){
(一)(及)$/$1."x(79-长度$1.),2元/东;;
印刷品;
}
样本运行:

$ echo -e 'foo&\n&\nbar &\nbaz' | ./align-ampersands foo & & bar & baz $echo-e'foo&\n&\nbar&\nbaz'|/对齐符号 福& & 酒吧& 巴兹
如果您的输入包含制表符,您将需要使用更复杂的处理。

不确定我是否正确理解您的问题,但您可以尝试以下操作(假设您的文件以空格分隔):


awk'/&$/{for(i=1;iawk和Perl都可以工作。它们都有
printf
substr

#! /usr/bin/env perl
use warnings;
use strict;

my $string = "this is some text &";

my $last_char = substr($string, -1, 1);
$string =  substr ($string, 0, length ($string ) - 1);
printf qq(%-79.79s%s\n), $string, $last_char;
substr
命令在Awk和Perl中都可用

整个命令可以做成一行:

printf qq(%-79.79s%s\n), substr ($string, 0, length ($string ) - 1), substr($string, -1, 1);

该问题定义不清。短于80的行会发生什么情况?填充空格?长于80的行会发生什么情况?第80个字符是否替换为
&
,或者
&
是否拼接到该位置?
printf qq(%-79.79s%s\n), substr ($string, 0, length ($string ) - 1), substr($string, -1, 1);
awk '/&$/{$80="&"}1' file