【问题标题】:Using date variable in sed在 sed 中使用日期变量
【发布时间】:2019-01-28 18:04:03
【问题描述】:

您好,我正在尝试在 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 天或更长时间的所有内容

谢谢, 克里斯

【问题讨论】:

    标签: bash date sed


    【解决方案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')"?

    如果您在脚本中执行此操作,则无需这样做。

    【讨论】:

    • 不幸的是,这似乎不起作用chris@DESKTOP-3QUNCRU:~$ sed -i -e "1,/&lt;pubDate&gt;$(LC_ALL=nn_NO.UTF-8 date -d "2 days ago" +'%a, %d %b %Y')/\!d" test.rss sed: -e expression #1, char 30: unknown command: \'`
    • 对不起,不能使用反斜杠来转义历史字符,我展示了正确的方法。
    猜你喜欢
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    • 2022-01-19
    • 2019-05-18
    • 2012-06-24
    • 1970-01-01
    • 2019-02-05
    相关资源
    最近更新 更多