首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在sed命令中包含"Commandline: packagekit role='update-packages'“?

如何在sed命令中包含"Commandline: packagekit role='update-packages'“?
EN

Ask Ubuntu用户
提问于 2019-07-09 14:16:30
回答 1查看 104关注 0票数 0

我用

代码语言:javascript
复制
cat /var/log/apt/history.log > ~/Desktop/allhistory.log && zcat /var/log/apt/history.log*gz >> ~/Desktop/allhistory.log

创建~/Desktop/allhistory.log.。

我能跑

代码语言:javascript
复制
sed -r -i.1 '/(^Commandline: apt-get --no-upgrade|^Commandline: apt full-upgrade|^Upgrade: |^End-Date: |^Error: |^Requested-By: |^Commandline: apt-get autoremove|^Commandline: apt autoremove|^Commandline: apt-get --yes|Commandline: apt-get purge|Commandline: apt purge|^Remove: |^Commandline: apt-get dist-upgrade|^Install: |Commandline: aptdaemon|--reinstall|^Commandline: apt-get --yes --no-install-recommends|^Purge:|^Reinstall )/d' allhistory.log

排除我不想要的东西。但我也想包括

代码语言:javascript
复制
Commandline: packagekit role='update-packages'

当我尝试

代码语言:javascript
复制
sed -r -i.1 '/(^Commandline: packagekit role=\'update-packages\'|^Commandline: apt-get --no-upgrade|^Commandline: apt full-upgrade|^Upgrade: |^End-Date: |^Error: |^Requested-By: |^Commandline: apt-get autoremove|^Commandline: apt autoremove|^Commandline: apt-get --yes|Commandline: apt-get purge|Commandline: apt purge|^Remove: |^Commandline: apt-get dist-upgrade|^Install: |Commandline: aptdaemon|--reinstall|^Commandline: apt-get --yes --no-install-recommends|^Purge:|^Reinstall )/d' allhistory.log

我得到了

代码语言:javascript
复制
bash: syntax error near unexpected token `)'

要在sed命令中成功地包含Commandline: packagekit角色=‘update-packages’,我需要做什么?

EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2019-07-09 14:39:59

问题归结为“如何在单引号内引用/使用单引号”?

这个答案 on stackoverflow.com解释了这一点。使用

代码语言:javascript
复制
sed -r -i.1 '/(^Commandline: packagekit role='"'"'update-packages'"'"'|^Commandline: apt-get --no-upgrade|
               ^Commandline: apt full-upgrade|
               ....|
               ^Reinstall )/d' allhistory.log

)我增加了新行以提高可读性。)将它们放到实际的命令中。

基本上是:将每个内部'替换为'"'"'。这就是:

  • '结束第一个字符串,
  • 在双引号("'")中附加文字'
  • 再次追加字符串的下一部分,以'开头

如果你认为这是不可读的,那么你是对的。这是因为bash没有像其他语言那样有一个很好的字符串连接操作符。如果存在这样的运算符(例如,+),则如下所示:

代码语言:javascript
复制
sed … '...role=' + "'" + 'update-packages' + "'" + '|^Commandline…'
#      ssssssss     d     sssssssssssssss     d     ssssssssssssss

这里,ses表示一个单引号,ds表示单引号中间的单引号。由于bash中没有这样的+运算符,所以需要将它们粘合在一起,中间没有任何空格,这就给出了'"'"'

票数 2
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1157009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档