所以,我正在制作一个小脚本来为我完成一项任务。我的任务是将 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
中的引号是为了避免在运行脚本时出现“模糊重定向”错误。
更新@Just Somebody
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中的“?”
非常感谢大家!
答案 0 :(得分:1)
你那里有一个非打印的字符。尝试:
dmidecode |grep -i Address|sed 's/Address://'| od -c
准确了解您的目标。
UPDATE:注释表明其中有一个需要清理的标签字符。
更新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正则表达式和替换。