Linux 从shell/bash输出的时髦文件名?
所以,我制作了一个小脚本来完成整个任务。任务是将Linux 从shell/bash输出的时髦文件名?,linux,bash,shell,Linux,Bash,Shell,所以,我制作了一个小脚本来完成整个任务。任务是将dmidecode-Fn的输出获取到文本文件中,然后获取dmidecode输出的一部分,在我的示例中,地址(0xE0000)作为txt的文件名 我的脚本如下所示,确实有效,我已经测试过了。我唯一的一个小问题是,txt的文件名显示为“?0xE0000.txt” 我的问题是,为什么我的名字后面会有一个问号和一个空格 #!/bin/bash directory=$(pwd) name=$(dmidecode|grep -i Address|sed 's/
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 someone
root@server:/home/user/Desktop# dmidecode | sed -n 's/Address://p'
0xE0000
root@server:/home/user/Desktop#
解决方案
使用|sed-n的/^.*地址:.*0x/0x/p'
去掉了0xE0000.txt中的“?”
非常感谢大家 里面有一个非打印字符。尝试:
dmidecode |grep -i Address|sed 's/Address://'| od -c
看看你到底得到了什么
更新:注释表明其中有一个选项卡字符需要清除
更新2:前导选项卡位于单词地址之前。尝试:
name=$(dmidecode |grep -i Address|sed 's/^.*Address:.*0x/0x/')
或者正如有人指出的那样:
name=$(dmidecode|sed -n 's/^.*Address:.*0x/0x/p')
更新3
这将替换正则表达式更改为replace
^(行首)后跟.*(任何字符(包括制表符!)后跟地址:后跟.*(任何字符(包括空格!))后跟0x(由于地址是十六进制的,所以始终位于地址的开头)
与
0x(因为您希望将其作为结果的一部分)
如果您想了解更多信息,请阅读sed正则表达式和替换。什么是echo“$name”| xxd
输出?听起来好像dmicode
在地址:
和地址之间放置了一些内容。也许是制表符?如果我必须在黑暗中尝试,我会遇到grep
插入颜色转义序列并破坏东西的情况。请确保您没有使用grep
别名,或者明确使用grep--color=never
我的脚本如下所示并且确实有效,我已经对它进行了测试。-鉴于dmicode
打字错误,这是一个大胆的说法。grep | sed
总是可疑的,很少有理由,sed通常就足够了。在您的情况下,dmidecode | sed-n'/Address://p'
直接在终端中键入此内容,会给我:sed:-e表达式#1,char 13:未知选项
s'0000000`抱歉,在其中键入了一个额外的/。已编辑。这样想,我现在得到的是0000000\t0 x e0\n0000012@pjz删除grep部分:dmidecode | sed-n's/Address://p'
好吧,这个空间已经被去掉了,现在我只在名字前面加了一个“?”。所以它是“?0xE0000.txt
”。我决定用awk代替grep,我不认为这有什么区别,因为他们实际上做的是同一件事。