我得到了一个不想要的'?' 在执行此操作时,在我的文件名末尾:
emplid=$(grep -a "Student ID" "$i".txt | sed 's/(Student ID: //g' | sed 's/)Tj//g' )
#gets emplid by doing a grep from some text file
echo "$emplid" #prints employee id correctly
cp "$i" "$emplid".pdf #getting an extra '?' character after emplid and before .pdf
Run Code Online (Sandbox Code Playgroud)
即不是得到像123456.pdf这样的文件名,而是得到123456?.pdf.如果回波打印正确,为什么会发生这种情况?如何删除尾随问号字符?
Gor*_*son 10
听起来你的脚本文件有DOS样式的行结尾(\ r \n)而不是unix样式(只是\n) - 当这种格式的脚本时,\ r被视为命令的一部分.在这个例子中,它被包含在$ emplid中,因此包含在文件名中.
许多平台都支持dos2unix将文件转换为unix样式行结尾的命令.一旦它被转换,坚持支持unix风格的文本文件的文本编辑器.
编辑:我假设问题行结尾是在shell脚本中,但它看起来像是在输入文件("$ i".txt)中.您可以在输入文件上使用dos2unix来清理它和/或在脚本中的sed命令中添加清理步骤.顺便说一句,您可以使用-e选项使用sed的单个实例应用多个编辑:
emplid=$(grep -a "Student ID" "$i".txt | sed '-e s/(Student ID: //g' -e 's/)Tj//g' -e $'s/\r$//' )
Run Code Online (Sandbox Code Playgroud)
我建议不要使用sed 's/.$//'- 如果文件是unix格式,那将切断文件名的最后一个字符.
| 归档时间: |
|
| 查看次数: |
12330 次 |
| 最近记录: |