我想在程序的第 80 列之后添加一个字符串和行号。我可以使用贪婪匹配(.*)
来匹配一行中的所有内容并将其替换为\1 suffix
如果我只需要添加后缀。但是我如何填充空白/空格直到第 80 列然后添加string
然后行号#
。当我使用sed -e "s/\(.*\)/\1 string/g" infile > outfile
. 我只能添加后缀,但不能在第 80 列之后添加,并且没有行号。我正在通过 unxutil 在 Windows 上使用 sed、gawk。提前谢谢你。
问问题
183 次
3 回答
0
GNU sed的代码:
sed ':a s/^.\{1,79\}$/& /;ta;s/$/& suffix/;=' file|sed 'N;s/\(.*\)\n\(.*\)/\2 \1/'
于 2013-07-23T13:14:28.640 回答
0
尝试:
perl -ple's{\A(.*)\z}{$1.(" "x(80-length($1)))." # $."}ex'
更新:
添加一些选项。
Usage: script.pl [-start=1] [-end=0] [-pos=80] [-count=1] <file> ...
script.pl
:
#!/usr/bin/env perl
# --------------------------------------
# Pragmatics
use v5.8.0;
use strict;
use warnings;
# --------------------------------------
# Modules
# Standard modules
use Getopt::Long;
use Data::Dumper;
# Make Data::Dumper pretty
$Data::Dumper::Sortkeys = 1;
$Data::Dumper::Indent = 1;
# Set maximum depth for Data::Dumper, zero means unlimited
local $Data::Dumper::Maxdepth = 0;
# --------------------------------------
# Configuration Parameters
# Command line arguments
my %Cmd_options = (
count => 1, # where to start the line counting
end => 0, # line to end on, zero means to end of file
pos => 80, # where to place the line number
start => 1, # which line to start on
);
my %Get_options = (
'count=i' => \$Cmd_options{ count },
'end=i' => \$Cmd_options{ end },
'pos=i' => \$Cmd_options{ pos },
'start=i' => \$Cmd_options{ start },
);
# conditional compile DEBUGging statements
# See http://lookatperl.blogspot.ca/2013/07/a-look-at-conditional-compiling-of.html
use constant DEBUG => $ENV{DEBUG};
# --------------------------------------
# Variables
# --------------------------------------
# Subroutines
# --------------------------------------
# Name: get_cmd_opts
# Usage: get_cmd_opts();
# Purpose: Process the command-line switches.
# Returns: none
# Parameters: none
#
sub get_cmd_opts {
# Check command-line options
unless( GetOptions(
%Get_options,
)){
die "usage: number_lines [<options>] [<file>] ...\n";
}
print Dumper \%Cmd_options if DEBUG;
return;
}
# --------------------------------------
# Main
get_cmd_opts();
while( my $line = <> ){
# is the line within the range?
if( $. >= $Cmd_options{start} && $Cmd_options{end} && $. <= $Cmd_options{end} ){
chomp $line;
my $len = length( $line );
printf "%s%s # %05d\n", $line, q{ } x ( $Cmd_options{pos} - $len ), $Cmd_options{count};
$Cmd_options{count} ++;
# else, just print the line
}else{
print $line;
} # end if range
} # end while <>
于 2013-07-23T13:15:14.703 回答
0
awk '{$0=$0"suffix"NR}1' your_file
或者
perl -pe 's/$/suffix$./g' your_file
注意:当您说 80 个字符时,我假设您的意思是行尾
于 2013-07-23T12:06:05.033 回答