我有一个 .xml 文件,我正在尝试在 RHEL6 计算机上执行“groupinstall”,因为该 .xml 文件中有数百个库...(接近 16 000 行)。
因此,我尝试提取具有以下结构的 .xml 文件中包含的组名称:
<b>
<group>
<id> group name </id>
<packages>
...
</packages>
<id> group name 2 </id>
<packages>
...
</packages>
<id> etc... </id>
</group>
</b>
基本上,这就是我尝试过的:
sed -n '/<id>/,/<\/id>/p' test1.txt > test2.txt
我将 .xml 文件复制到 test1.txt。我正在尝试将组名称从 test1.txt 提取到名为 test2.txt 的第二个文件中。但是,通过上面的行,它会提取文件中从第一个<id>
标签到最后一个标签的所有内容。</id>
如何更改我的代码以多次提取它?
我的第二个问题是:-downloadonly 插件是否可以与 yum 组一起使用?
答案1
听起来你需要的是更多类似的东西
sed -n 's:.*<id>\(.*\)</id>.*:\1:p'
(假设像在您的示例中一样,<id>
和位于同一行,并且每行</id>
只有一个)。<id>...</id>
或者使用 XML 感知工具:
xmlstarlet sel -t -v '//id' -n
答案2
$ echo '<id>I am a sample group</id>' | sed 's/<\/\?[^>]\+>//g'
I am a sample group
$
这将与任何标签,当然也带有<a href="...">...</a>
锚点。不使用 GNUisms — 基本的正则表达式支持sed
就足够了。
然而:请注意开始和结束标签必须必须在同一行,否则语句必须再次重写。
答案3
请尝试一下
xml_grep 'id' file.xml --text_only
答案4
我读了这篇文章,希望解决提取 Reqd 的问题。来自 RHEL 7.3 DVD 的软件包repos.xml
,我认为这正是上面的作者想要做的。所以我希望这个脚本可以帮助其他人......我现在已经使用它很多次了。
因此,我需要将“GNOME DESKTOP”组安装到未配置 X/GUI 的“最小安装”RHEL7 服务器。
[root@rac01]# yum group list
Loaded plugins: ulninfo
There is no installed groups file.
嗯…… DVD 上没有 yum 的组列表(是的,我尝试了所有常见的“google”修复程序,但从未成功),因此求助于 xml 中的硬源列表。
- 安装 DVD。
- 找到包含我所需的包列表的 XML 文件。
- 提取包组列表。
- 循环遍历包列表并安装(包括依赖项)。
假设你已经跑了
createrepo /your/local_rpms/dir
。sudo su - mkdir /mnt/sr0 mount /dev/sr0 /mnt/sr0 cd /mnt/sr0 FILE=$(find . -name "*.xml" | xargs grep '<id>gnome-desktop<\/id>'| cut -d: -f1) PKGLIST=$(sed -n '/<id>gnome-desktop<\/id>/,/<\/packagelist>/p' $FILE \ | sed -n '/^ *<packagelist> *$/,/^ *<\/packagelist> *$/{/<packagereq type>/{d};p}' \ | cut -d'>' -f2 \ | cut -d'<' -f1) for p in ${PKGLIST} do yum deplist ${p}* | awk '/provider:/ {print $2}' | sort -u | xargs yum -y install done