我有以下描述的要求。
这只是一个示例脚本:
$ cat test.sh
#!/bin/bash
perl -e '
open(IN,"addrss");
open(out,">>addrss");
@newval;
while (<IN>)
{
@col_val=split(/:/);
if ($.==1)
{
for($i=0;$i<=$#col_val;$i++)
{
print("Enter value for $col_val[$i] : ");
chop($newval[$i]=<STDIN>);
}
$str=join(":");
$_="$str"
print OUT;
}
else
{
exit 0;
}
}
close(IN);
close(OUT);
运行此scipt:
$ ./test.sh
Enter value for NAME : abc
Enter value for ADDRESS : asff35
Enter value for STATE : XYZ
Enter value for CITY : EIDHFF
Enter value for CONTACT
: 234656758
$ cat addrss
NAME:ADDRESS:STATE:CITY:CONTACT
abc:asff35:XYZ:EIDHFF:234656758
当我第二次跑它时:
$ cat addrss
NAME:ADDRESS:STATE:CITY:CONTACT
abc:asff35:XYZ:EIDHFF:234656758ioret:56fgdh:ghdgh:afdfg:987643221 ## it is appended in the same line...
我希望将它添加到下一行。
注意: 我想通过在Perl中使用文件句柄而不是在shell中使用重定向操作符来做到这一点。
答案 0 :(得分:1)
我认为您需要在打印出来之前为字符串添加换行符:
$_="$str\n";
另外,您的脚本是否以bash形式执行,并且在脚本中执行了“perl -e”?为什么不将脚本文件作为perl执行?
答案 1 :(得分:0)
我认为如果您在打印的字符串末尾添加换行符,则可以使用:
$_="$str\n"
答案 2 :(得分:0)
print OUT $_ . "\n";
或
而不是打印,请使用printf并在正面或背面添加换行符。