我在HP-UX / ksh UNIX机器上,我有一些文件,我希望始终用包含变量内容的另一行替换第一行。这是一个示例文件和变量:
date=04_16_2016
var1=RM1
(其他时间var1会有所不同)
file1.text:
file=/home/user1/something_04_09_2016.txt
stuff
stuff
stuff
我想完全替换掉第一行,并用类似psuedo-code:
之类的东西替换它file=/home/user1/something_$var1_$date.txt
完成后文件将如下所示:
file=/home/user1/something_RM1_04_13_2016.txt
stuff
stuff
stuff
任何帮助将不胜感激!
答案 0 :(得分:1)
说,您设置了date
和var1
,然后就可以了
sed "1 s:.*:/home/user1/something_${var1}_${date}.txt}:" file1.txt > file1.mod
sed s
仅适用于第1
行。
答案 1 :(得分:0)
当您的sed
没有-i
选项(在场编辑)时,您可以使用ed
。
不要在下面缩进代码,大多数事情都需要在行的开头。
newstring="/home/user1/something_${var1}_$(date +'%d_%m_%Y').txt"
ed -s input << EOF
1c
${newstring}
.
w
q
EOF
答案 2 :(得分:0)
另一个header="some string with $var and $formatted_date"
sed -i -e "1i${header}" -e 1d file
替代
data data;
input
x $ y $ a b c d e;
datalines;
a c 1 45 32 7 45
b a 22 45 55 33 55
d e 56 78 66 44 12
c d 33 45 44 56 77
;
run;
data data1;
set data;
count = _n_;
run;
proc sql noprint;
select count into: countlist
separated by " " from data1;
quit;
proc sql noprint;
select x into: xlist
separated by " " from data1;
quit;
proc sql noprint;
select y into: ylist
separated by " " from data1;
quit;
%macro add;
data data2 (drop = count);
set data1;
%do i = 1 %to %sysfunc(countw(&countlist.));
%let this_x = %scan(&xlist., &i.);
%let this_y = %scan(&ylist., &i.);
if &i. = count then total = &this_x. + &this_y.;
%end;
run;
%mend add;
%add;