[英]BASH Script to iterate through a list of IDs in an XML file and print/output the name to shell or output file?
[英]funky file name output from shell/bash?
因此,即时通讯制作了一个小的脚本来为我完成整个任务。 任务是将dmidecode -Fn
的输出转换为文本文件,然后将dmidecode
输出的一部分(在我的示例中为地址(0xE0000))作为txt的文件名。
我的脚本如下,并且可以正常工作,我已经对其进行了测试。 我唯一的小问题是txt的文件名显示为“ ?0xE0000.txt ”
我的问题是,为什么我会在问号中加上一个空格?
#!/bin/bash
directory=$(pwd)
name=$(dmidecode|grep -i Address|sed 's/Address://')
inxi -Fn > $directory/"$name".txt
"$name".txt
的引号是为了避免运行脚本时出现“歧义重定向”错误。
更新@只是有人
root@server:/home/user/Desktop# dmidecode | sed -n 's/Address://p'
0xE0000
root@server:/home/user/Desktop#
解决方案 |sed -n 's/^.*Address:.*0x/0x/p'
摆脱了0xE0000.txt中的“?”
非常感谢大家!
您那里有一个非打印字符。 尝试:
dmidecode |grep -i Address|sed 's/Address://'| od -c
确切地了解您所得到的。
更新:注释指示其中有一个制表符,需要清除。
更新2 :前导选项卡在 Address
一词之前 。 尝试:
name=$(dmidecode |grep -i Address|sed 's/^.*Address:.*0x/0x/')
或@just_somebody指出:
name=$(dmidecode|sed -n 's/^.*Address:.*0x/0x/p')
更新3
这将替换正则表达式更改为
^(行的开头),后跟。*(任何字符(包括制表符!)),然后是地址:其后是。*(任何字符(包括空格!)),后跟0x(始终位于地址的开头,因为用十六进制表示)
同
0x(因为您希望将其作为结果的一部分)
如果您想了解更多信息,请阅读有关sed正则表达式和替换的信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.