0

ほとんどの行が繰り返されるtxtファイルがあり、「find」を含むすべての行で変更し、最後の「/」を区切り、その後に「 -name 」を追加します。

テキストファイル:

find /etc/cron.*
find /etc/inet.d/*.conf
find /etc/rc*
grep root /etc/passwd

期待されるビュー:

find /etc/ -name cron.*
find /etc/inet.d/ -name *.conf
find /etc/ -name rc*
grep root /etc/passwd
4

4 に答える 4

4

これはうまくいくはずです:

awk 'BEGIN{FS=OFS="/"}{$NF=" -name "$NF}1' file

$ cat file
find /etc/cron.*
find /etc/inet.d/*.conf
find /etc/rc*
grep root /etc/passwd

$ awk 'BEGIN{FS=OFS="/"}{$NF=" -name "$NF}1' file
find /etc/ -name cron.*
find /etc/inet.d/ -name *.conf
find /etc/ -name rc*
grep root /etc/ -name passwd
于 2013-07-23T15:02:49.553 に答える
1
perl -wpe's!^(find.*/)!$1 -name !' file

実際にファイルを変更するには、-wpe の前に -i を追加します。

より新しい perl バージョンの場合:

perl -wpe's!^(find.*/)\K! -name !' file
于 2013-07-23T15:09:20.857 に答える
0
use warnings;
use strict;

open (FILE, "$ARGV[0]"); #pass file containing commands as first argument
my @file_contents = <FILE>;
close FILE;

#my @file_contents = (
#   'find /etc/cron.*',
#   'find /etc/inet.d/*.conf',
#   'find /etc/rc*',
#   'grep root /etc/passwd',
#);

#Build command line
foreach my $line (@file_contents){
    chomp $line;
    $line =~ s/(.*?) (\/.*\/)(.*)/$1 $2 -name $3/ if $line =~ /find/;
    print "$line\n";
}
于 2013-07-23T15:12:29.603 に答える