在 Sed 替换中回显变量的结果

在 Sed 替换中回显变量的结果

我有一个名为的文件LoginExcInternal.txt,其中的数据如下所示:

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

这两列由 分隔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: unterminateds' command`。

期望的输出:

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

相关内容