【发布时间】:2020-07-12 18:25:45
【问题描述】:
我将带有定义的文本文件保存在一个文件夹中。我喜欢把它们转换成口语,这样我就可以听它们了。我已经通过运行一些命令手动将一些预处理代码插入到文本文件中,然后将文本转换为口语,如下所示:
sed 's/\..*$/[[slnc 2000]]/' input.txt 在第一个句点后插入一个控制码
sed 's/$/[[slnc 2000]]/' input.txt"在每行末尾插入一个控制代码
cat input.txt | say -v Alex -o input.aiff
我不想每次都重新输入这些命令,而是想创建一个 Bash 脚本,将这些命令的输出通过管道传输到最终产品。我想用脚本名称调用脚本,后跟文本文件的输入文件参数。我想保留原始文本文件,这样如果我再次打开它,实际上不会插入任何控制代码,因为控制代码的唯一目的是在音频文件中插入暂停。
我试过写
#!/bin/bash
FILE=$1
sed 's/$/ [[slnc 2000]]/' FILE -o FILE
但是我马上就挂断了,因为它说 sed: -o: No such file or directory。有人可以帮忙吗?
【问题讨论】:
-
使用变量时应该写$FILE。
-
某些操作系统和
sed版本不喜欢读取和写入同一个文件。最好 (a) 在此之前加上cat "${FILE}" |,或者 (b) 使用临时文件并将其移动到位。后者有一个优势,如果替换由于任何原因失败,它可能会在原始文件被覆盖(并丢失)之前失败。第一种方法可以覆盖文件。第三种选择是执行sed -i -e "s/..." "${FILE}",它会在文件中就地更改......虽然这并不总是有效,具体取决于操作系统版本,sed等。 -
(或者“就地”限制可能是底层文件系统的一个因素,我不确定。我只知道我遇到了无法使用
-i的情况。 )