在sed中使用日期变量

时间:2019-01-28 18:04:04

标签: bash date sed

嗨,我想在sed命令中使用日期变量。

谁能看到我要去哪里错了?

sed -i -e '1,/<pubDate>"$(LC_ALL=nn_NO.UTF-8 date -d "2 days ago" +'%a, %d %b %Y')/!d"' file

我正在尝试从rss转储中删除2天或更长时间的所有内容

谢谢, 克里斯

1 个答案:

答案 0 :(得分:1)

命令扩展未在单引号内完成(单引号内的双引号不会对此进行更改)。您需要在整个命令中使用双引号,而不仅仅是命令扩展。

sed -i -e "1,/<pubDate>$(LC_ALL=nn_NO.UTF-8 date -d "2 days ago" +'%a, %d %b %Y')/!d" file

但是,如果您以交互方式进行此操作,则需要将!放在单引号内以防止其进行历史扩展。

sed -i -e "1,/<pubDate>$(LC_ALL=nn_NO.UTF-8 date -d "2 days ago" +'%a, %d %b %Y')/"'!d' file

或关闭历史记录扩展:

set +H
sed -i -e "1,/<pubDate>$(LC_ALL=nn_NO.UTF-8 date -d "2 days ago" +'%a, %d %b %Y')/!d" file
set -H

请参见How to escape history expansion exclamation mark ! inside a double quoted " command substitution like "$(echo '!b')"?

如果您在脚本中执行此操作,则没有必要。