从shell / bash输出的时髦文件名?

时间:2014-11-11 20:24:10

标签: linux bash shell

所以,我正在制作一个小脚本来为我完成一项任务。我的任务是将 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中的“?”

非常感谢大家!

1 个答案:

答案 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正则表达式和替换。