替换文件的第一行并添加带变量的新行

时间:2016-04-13 17:08:07

标签: unix sed ksh

我在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

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:1)

说,您设置了datevar1,然后就可以了

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;