用 $Date 替换 $Date$ 的 sed 命令:2021-01-06

Sco*_*t V 3 sed

我需要使用sed命令来搜索文本文件并替换$Date$为: 日期文本$Date: 2021-01-06... $ 在哪里...

我有一个sed命令可以搜索Date并将其替换为 Date: 2021-01-06...

sed "s/Date/Date $(date)/"
Run Code Online (Sandbox Code Playgroud)

但我无法得到一个sed命令来替换$Date$.

此外,我能够得到一个sed命令来替换$Date usingsed "s/\$Date/\$Date $(date)/" 但我无法弄清楚搜索和替换的语法$Date$

我试过:

sed "s/\$Date\$/\$Date $(date) \$/"
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

Kam*_*ski 13

我试过:sed "s/\$Date\$/\$Date $(date) \$/"但它不起作用。

因为\$在双引号中只告诉外壳不要解释 (expand) $,但是有sed. 它获取s/$Date$/$Date … $/(其中表示$(date)扩展到的内容)并将第二个解释$为与行尾匹配的锚点。Ins/regexp/replacement/ $仅在 结尾处被解释为锚点regexp。所以你也需要逃避这个特殊的$for sed,即你需要sed从字面上得到\$. 这可以通过以下方式完成:

sed "s/\$Date\\$/\$Date $(date) \$/"
Run Code Online (Sandbox Code Playgroud)

或者

sed "s/\$Date\\\$/\$Date $(date) \$/"
Run Code Online (Sandbox Code Playgroud)

它适用于两个或三个反斜杠,因为$之前的双引号/不需要(但可能)被转义,并且\需要\\双引号。这有点复杂,因此考虑单引号所有不需要双引号的片段:

sed 's/$Date\$/$Date '"$(date)"' $/'
Run Code Online (Sandbox Code Playgroud)

这里所有$应该到达的字符sed都是单引号的;唯一\应该得到sed的也是单引号。