Sed 代替変数のエコー結果

Sed 代替変数のエコー結果

次のデータを含むファイルがありますLoginExcInternal.txt

Name1   OpenFin/111.111.111.111
Name2   OpenFin/111.111.111.112
Name3   Chrome/111.111.111.111

2つの列はで区切りますtabs

これを置き換える別のファイルに出力する必要がありますOpenFinChrome=VLOOKUP('Mar 19'!A4,'User-Firm'!A2:B1999,2,FALSE)

前の月曜日の月と年を常に表示する必要がありますMar 19

これが私が今まで持っているものです:

z="$(date -d 'last Sunday - 6 day' '+%b %y')" && sed 's/OpenFin.*/=VLOOKUP('$z'!A4,'User-Firm'!A2:B1999,2,FALSE)/g;s/Chrome.*/=VLOOKUP('$z'!A4,'User-Firm'!A2:B1999,2,FALSE)/g' LoginExcInternal.txt > Test2.txt

sed: -e expression #1, char 24: unterminatedこれによりs 'コマンドエラーが発生しました。

希望の出力:

Name1   =VLOOKUP('Mar 19'!A4,'User-Firm'!A2:B1999,2,FALSE)
Name2   =VLOOKUP('Mar 19'!A4,'User-Firm'!A2:B1999,2,FALSE)
Name3   =VLOOKUP('Mar 19'!A4,'User-Firm'!A2:B1999,2,FALSE)

Mar 19アポストロフィがなければなりません。'Mar 19'

答え1

sedなし:

str="=VLOOKUP('$(date -d 'last Sunday - 6 day' '+%b %y')'";
str+="$(printf "\\$(printf '%03o' '33')")";
str+="A4,'User-Firm'";
str+="$(printf "\\$(printf '%03o' '33')")";
str+="A2:B1999,2,FALSE)"; 
while read name ignored;do 
    ((${#name}))&&echo "${name}    ${str}";
done<urfile.txt

sedで:

sed "s/OpenFin.*$\|Chrome.*$/${str}/g" urfile.txt

これはうまくいきます

答え2

注文する:sed -E "s/Chrome|OpenFin/=VLOOKUP\('Mar 19'\!A4,'User-Firm'\!A2:B1999,2,FALSE\)/g" filename|sed "s/\/[0-9]\{3\}.*//g"

出力

sed -E "s/Chrome|OpenFin/=VLOOKUP\('Mar 19'\!A4,'User-Firm'\!A2:B1999,2,FALSE\)/g" 
 filename|sed "s/\/[0-9]\{3\}.*//g"

Name1   =VLOOKUP('Mar 19'!A4,'User-Firm'!A2:B1999,2,FALSE)
Name2   =VLOOKUP('Mar 19'!A4,'User-Firm'!A2:B1999,2,FALSE)
Name3   =VLOOKUP('Mar 19'!A4,'User-Firm'!A2:B1999,2,FALSE

)

関連情報