所以我下载了一堆文本文件,并想将这些文件重命名为包含在这些文件中的标题。
的输出head sn-800.txt
是:
吉布森研究公司 https://www.GRC.com/ 系列:现在安全! 剧集:#800 日期:2021 年 1 月 5 日 标题:太阳能暴雪 主持人:Steve Gibson & Leo Laporte 来源: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
Run Code Online (Sandbox Code Playgroud)
但似乎无法弄清楚如何删除最后的换行符(上面的`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
Run Code Online (Sandbox Code Playgroud)
由于某些或其他原因,最后一个文件是正确的,但之前的文件在某处仍有换行符???(如果我-n
在 last 上执行 a echo
,则所有文件名都连接为一个字符串)
我究竟做错了什么???
这些文件有 CR/LF 行结尾,所以你也需要删除\r
:
...
tr -d '\r\n';
...
Run Code Online (Sandbox Code Playgroud)
这就是为什么.txt
出现在每一行的开头的原因——它在末尾输出,但在光标回到行首之后。