我正在尝试使用 xmllint 从配置文件中解析 Solr 核心的名称。这有效:
xmllint --xpath /solr/cores/core/@name solr.xml |grep -Po '(?<=name=")[a-z-]+(?=")'
它返回类似:
core-a
core-b
...
Run Code Online (Sandbox Code Playgroud)
这正是我想要的,但我想消除 grep。似乎只用 xpath 就可以做到这一点。如果没有 grep,输出将如下所示:
name="core-a" name="core-b" ...
Run Code Online (Sandbox Code Playgroud)
将表达式包装起来string()将多个输出减少到仅第一个(即core-a仅此而已),这是没有用的。如何string对每个结果应用该函数?
我有一台安装了 Xubuntu 14.10 的 Toshiba NB510-108 上网本。在 Windows 7 Starter 下,温度传感器显示的值高达 45 摄氏度。在 Xubuntu 下,它们显示的值高达 55 度。我想使用 Thermald 将温度保持在 38 度。
我的 Thermal-conf.xml 文件仅包含一个 TSKN 类型的传感器和两个 rapl_controller 和 intel_powerclamp 类型的冷却设备。
传感器 -u 显示此
user@user-TOSHIBA-NB510:~$ sensors -u
acpitz-virtual-0
Adapter: Virtual device
temp1:
temp1_input: 42.000
temp1_crit: 110.000
coretemp-isa-0000
Adapter: ISA adapter
Core 0:
temp2_input: 43.000
temp2_crit: 100.000
temp2_crit_alarm: 0.000
Core 1:
temp3_input: 43.000
temp3_crit: 100.000
temp3_crit_alarm: 0.000
Run Code Online (Sandbox Code Playgroud)
谁能告诉我如何将上述传感器添加到Thermal-conf.xml,以及如何定位和添加其他冷却设备?
例如,我想将标签中的字段转换为该标签内的标签
<book name="Data Structure" price="250" pages="350"/>
Run Code Online (Sandbox Code Playgroud)
到
<book name="Data Structure">
<price>250</price>
<pages>350</pages>
</book>
Run Code Online (Sandbox Code Playgroud)
xmlstarlet我想使用或在 Linux 命令行中执行此操作sed。
我有一个 100 GB 的 xml 文档,我正在将其批量迁移到数据库。
在 中vim,我可以编辑文件,但无法使用:wq、:q或保存更改:xx。
我收到错误消息this file is read only - press ! to override。
没有任何效果,所以我使用:q!忽略我的更改并退出vim.
我怎样才能保存我的更改?
奖金问题
如果我不等待整个文件加载到内存中并按Ctrl + c查看已填充的内容,则保存该文档是否只会保存加载到内存中的内容并删除其余内容?
我有一个包含许多字符的文件(xml)&/</>/etc,但有时也有一些&字符本身。我想更改此符号&而不替换其他符号。
cat file.xml | sed s/"&"/"&"/g | sed s/"&"/"&"/g > new_file.xml
Run Code Online (Sandbox Code Playgroud)
例如,这不起作用,因为它还替换了&中找到的 s &。>
怎么做?
使用命令时:
-bash-4.2$ xmlstarlet ed -u "/configurations/rules/rule/branch" -v 'DAVID' config.xml > final.xml
Run Code Online (Sandbox Code Playgroud)
我看到输出文件已更改为DAVID,但它在每个声明“分支”标签的地方都被全局更改。
但是我只想在一个子节点上更改它,比如说“APP1”,我需要使用什么命令?有没有办法将值“DAVID”作为参数?
<configurations>
<smtpHost>smtp3.gmail.com</smtpHost>
<smtpPort>25</smtpPort>
<emailFrom>GitPushNotifier@hpe.com</emailFrom>
<emailSubject>Push notification</emailSubject>
<!-- Stash general URL-->
<gitViewerURL>http://mydtbld0005.gmail.com:7990/projects/</gitViewerURL>
<!-- repositories list and commit URL path per repo -->
<repositoryViewerPath name="hookTester" path="DevOps/repos/hooktester/commits/"/>
<separator>#@#</separator>
<catExe>cat</catExe>
<catExeWindows>type</catExeWindows>
<gitExe>git</gitExe>
<gitExeWindows>C:\\Program Files (x86)\\Git\\cmd\\git.exe</gitExeWindows>
<gitFolder>/gitdata/alm_mng.git</gitFolder>
<gitFolderWindows>c:\gitdata\alm_mng.git</gitFolderWindows>
<rules>
<rule>
<name>APP1</name>
<repo>hookTester</repo>
<branch>refs/heads/master</branch>
<emailTo>test@gmail.com</emailTo>
<path>F1/ido.xml </path>
</rule>
<rule>
<name>APP2</name>
<repo>hookTester</repo>
<branch>refs/heads/master</branch>
<emailTo>test@gmail.com</emailTo>
<path>F2/ido.xml </path>
</rule>
</rules>
</configurations>
Run Code Online (Sandbox Code Playgroud) 我正在处理 XML 文件,每个文件都可能有几十行长。在一个目录结构中,实际上有数百个这样的文件。是的,它是 Magento。
我需要找到包含该<foo><bar><boom><bang>元素的文件。一个<boom><bang>标签可以在其他变量定义的,所以我需要搜索的完整路径不只是结束标签或标签。每个标签之间可能有几十行,它们之间还有其他标签:
<foo>
<hello_world>
... 50 lines ....
</hello_world>
<bar>
<giraffe>
... 50 lines ....
</giraffe>
<boom>
<bang>Vital information here</bang>
</boom>
</bar>
</foo>
Run Code Online (Sandbox Code Playgroud)
搜索定义的文件的优雅*nix 方式是<foo><bar><boom><bang>什么?我目前正在使用最新的 Debian 派生发行版。
这是我目前的解决方案,远非雄辩:
$ grep -rA 100 foo * | grep -A 100 bar | grep -A 100 boom | grep bang | grep -E 'foo|bar|boom|bang'
Run Code Online (Sandbox Code Playgroud) 我需要将字符替换S为T:
<episode-num system="onscreen">S1 E12</episode-num>
Run Code Online (Sandbox Code Playgroud)
我期望的结果:
<episode-num system="onscreen">T1 E12</episode-num>
Run Code Online (Sandbox Code Playgroud)
我不知道 Git 是如何深入工作的,我只是用它来替换我的 xml 标签中的那个字符,在论坛中研究我找到了一些信息并尝试了以下命令行:
sed -e :l -e 's@\(<episode-num system="onscreen">.*\)S\([^amp;]\)\(.*</episode-num>\)@\1T\2\3@;tl' guide.xml
Run Code Online (Sandbox Code Playgroud)
但这不起作用,我希望你能帮助我。
仅针对嵌入其他指定标签中的指定标签,将一个标签值替换为另一个标签值的 xmlstarlet 命令是什么?
示例:搜索 tag 的每个出现,仅当它在标签内(在其他标签内)时才b需要替换为:d<a> ... </a>
<c>This is <b>an example</b>. <a>This is <b>a test;</b></a></c>
Run Code Online (Sandbox Code Playgroud)
<c>This is <b>an example</b>. <a>This is <d>a test;</d></a></c>
Run Code Online (Sandbox Code Playgroud)
这篇文章与如何在 XML 文件中将某些指定标签中的特定字符串替换为我试图找到的格式化 xml 文件的解决方案中嵌入标签中的其他字符串相关。
我需要帮助使用 grep 从 Linux 系统上的文件中提取分区日期时间。
源文件是一个 XML,包含以下数据:
<item start="20231010073000 +0100" stop="20231010100000 +0100">...</item>
Run Code Online (Sandbox Code Playgroud)
我需要提取完整的开始日期,但使用 grep 我无法得到完整的结果。我的代码:
for startDate in $(grep -Eo 'start="[0-9]{14} [\+|\-][0-9]{4}"' "$filepath" ); do
echo "$startDate"
done
Run Code Online (Sandbox Code Playgroud)
我得到了两个不同的结果:
start="20231010073000
+0100"
Run Code Online (Sandbox Code Playgroud)
我可以得到它如下:
start="20231010073000 +0100"
Run Code Online (Sandbox Code Playgroud)
我尝试过\s、[[:space:]]和其他示例,但使用相同的解决方案。
我的代码似乎有错误,但我无法修复它!
我很感谢任何形式的帮助!
xml ×10
xmlstarlet ×3
bash ×2
grep ×2
shell ×2
file-search ×1
linux ×1
locate ×1
osx ×1
permissions ×1
sed ×1
sensors ×1
vim ×1
xmllint ×1