所以我已经下载了一堆文本文件并想将这些文件重命名为标题这些文件中包含的内容。
的输出head sn-800.txt
是:
吉布森研究公司 https://www.GRC.com/ 系列:现在安全! 剧集:#800 日期:2021 年 1 月 5 日 标题: 太阳暴雪 主持人:史蒂夫·吉布森和里奥·拉波特 来源:https://media.grc.com/sn/sn-800.mp3 存档:https://www.grc.com/securitynow.htm
简而言之,sn-800.txt
应该成为sn-800 - SolarBlizzard.txt
在进入mv
335 个文件之前,我会回显屏幕上的所有内容:
#!/bin/bash
for iEpisode in {802..807};
do
echo -n "sn-$iEpisode - ";
grep "^TITLE:" sn-"$iEpisode".txt |
cut -d":" -f2 |
sed 's/\t//g' |
tr -d '\n';
echo ".txt";
done
但似乎无法弄清楚如何删除末尾的换行符(上面的`tr),因为这给了我:
.txt02 - Where the Plaintext Is
.txt03 - Comparative Smartphone Security
.txt04 - NAT Slipstreaming 2.0
.txt05 - SCADA Scandal
.txt06 - C.O.M.B.
sn-807 - Dependency Confusion.txt
由于某种或其他原因,最后一个文件是正确的,但之前的文件在某处仍然有换行符??? (如果我-n
在最后一个上执行 a echo
,所有文件名都会连接到一个字符串)
我究竟做错了什么???
答案1
这些文件有 CR/LF 行结尾,因此您也需要删除\r
:
...
tr -d '\r\n';
...
这就是为什么出现在每行开头的原因.txt
- 它在末尾输出,但在光标返回到行开头之后。