繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM