【发布时间】:2021-07-02 04:23:41
【问题描述】:
我正在尝试编写一个从文本文件中删除标点符号的脚本。
我尝试使用 sed,但我愿意接受其他建议(如 awk)
这是我目前的代码
declare -a marks=('\.' '\,' '\;' '\:')
for i in {0..3}
do
sed -i 's/${marks[i]}//g' test.txt
done
cat test.txt`
我认为我的主要问题是没有正确使用转义键。
【问题讨论】:
-
sed不会更改文件,它会输出新版本。单引号不插入变量。 -
@choroba 抱歉,我忘了添加 -i ,据我所知会更改文件。你能建议对变量插值的修复吗?
-
第二点是:用单引号括起来时,
${marks[i]}不会被bash扩展 -
与其在循环中多次运行
sed,不如使用一个包含所有要删除的字符的模式,或者从您的数组中创建一个模式。在您的示例中,sed命令可以是sed -i 's/[.,;:]//g' test.txt