我有一个要求,例如文件foo.txt,其中包含如下所示的键值对: vi foo.txt
a^1.0^b^2^cc^30^d^4^e^55^fg^67.0^h^8^i^99
,依此类推。 我必须编写一个shell脚本,将每个键值对放在不同的行中到不同的文件,例如goo.txt,其中包含:
a^1.0^
b^2^
cc^30^
D^4^
e^55^
fg^67.0^
h^8^
i^99^
我有一个类似的Perl脚本,但是我想要shell脚本。 Perl脚本就像
#! /usr/bin/perl -w
#
use strict;
use Getopt::Long;
my $filename = "";
my $Tags = "";
GetOptions ('file=s' => \$filename);
if (defined $filename and $filename ne "")
{
open (my $DATA,$filename) or die $!;
$Tags = <$DATA>;
while ($Tags =~ m/(.*?\^.*?\^)/g)
{
print "$1\n";
}
close($DATA)
}
我想要一个使用Shell脚本的类似代码。需要帮助来编写符合我要求的shell脚本(ksh)。
答案 0 :(得分:0)
cat filename | awk -F"^" '{split($0, a, "^"); for(i=1;i<NF;i=i+2){print a[i]"^"a[i+1]"^"}}
'
答案 1 :(得分:0)
您希望每秒钟^
后再添加一个换行符。
字段没有^
,不是^
的字符可以写为[^^]
。
每两个字段(不包括^
的任意数量的字母,后跟一个^
),
应该用匹配项代替,然后换行。
sed 's/[^^]*^[^^]*^/&\n/g' foo.txt