【问题标题】:Perl-oneliner to bashPerl-oneliner 到 bash
【发布时间】:2010-07-25 16:50:52
【问题描述】:
perl -E '$i=@{[`zypper lr`]}-2;map{`zypper rr $_`}1..$i'

在 bash 中编写这个 perl-onliner 的好方法是什么。 (我想使用 zypper 删除所有存储库)?

【问题讨论】:

  • @sid_com,为了确保我理解正确,您想删除所有包含名为 zypper 的文件的存储库吗?
  • 你能举个例子说明你正在尝试做什么,而不是期望人们对这个 perl 进行“逆向工程”。
  • 当 repo 编号存在漏洞时,Perl 程序将失败。
  • 安装操作系统后,我通过脚本包进行广告,而无需连接互联网。由于我不喜欢错误消息,因此我想删除所有存储库并仅添加 OS-iso-repo。到目前为止,我一直在使用“zypper mr -d ( all )”,但由于我不喜欢所有的 repo 名称,也不需要所有的 default-repos,所以我会尝试删除方式(我喜欢“rm -rf /etc/zypp/repos.d/*" :) )。安装完成后,我将添加我需要的存储库。
  • @Anders "zypper 是 ZYpp 系统管理库的命令行界面。它可用于安装、更新、删除软件、管理存储库、执行各种查询等等。" (来自人 zypper)。 zypper 周围有反引号。

标签: perl bash


【解决方案1】:

这是一种方法:

第一个命令统计zypper lr命令产生的行数。

因此,您可以通过以下方式获得:

COUNT_LINES=`zypper lr|tail +3|wc -l`

第二个命令只是通过计数器为每个数字 1 运行zypper rr [NUMBER];所以你在 bash 中运行 for 循环,如这个 SO 问题所示:

How do I iterate over a range of numbers in bash?

【讨论】:

  • 编号有孔时失败。
  • @daxim - 这是 Perl 所做的 100%。他问如何将 Perl 代码转换为 bash,而不是如何在 bash 中正确执行 XXX。
  • 所以我们甚至不应该告诉人们什么时候他们的代码会炸毁他们,只要这正是他们要求的?
  • @hobbs - 我没有说我们不应该这样做。只是我在这种情况下选择了它(如果您仔细阅读我的许多其他答案,您会发现我的意思是在这种情况下)我不会。没有人会阻止某人(理论上称他们为“达克西姆”)选择不同的答案,而其他人则选择支持他们认为最好的答案。这不就是 SO 应该的工作方式吗?
【解决方案2】:
zypper lr | grep -P "^\d" | cut -d'|' -f 1 | xargs sudo zypper rr

但更简单:

sudo rm -rf /etc/zypp/repos.d/*

【讨论】:

  • 我的 grep 不理解 "^\d" 所以我必须使用 "^[0-9]"。
  • 对,我不记得我将grep 别名为grep -P。当你运行 zypper 时,你有 openSUSE,我敢打赌你确实有一个理解 Perl 正则表达式的 grep - 它只需要专门启用。
猜你喜欢
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 2017-07-21
  • 2018-07-10
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多