【问题标题】:Bash for loop remove commas and redirect output to same file names [duplicate]Bash for循环删除逗号并将输出重定向到相同的文件名[重复]
【发布时间】:2019-05-29 15:07:25
【问题描述】:

我正在尝试运行一个 shell 脚本,该脚本循环遍历我在执行 shell 脚本时指定的目录中的所有文件,删除文件中的所有逗号,并将其保存为相同的文件名。

问题是它删除了每个文件中的所有内容,我不确定为什么,但相信它与"$filename"; 有关。我也试过把它放在括号里,但我是 Bash 的新手。

我这样运行它: NaN$ ./remove_commas.sh /path/to/dir

./remove_commas.sh

#!/bin/bash

dir="$@"

for filename in $dir/*; do
    echo "$filename"

    cat "$filename" | tr -d ',' > "$filename";
done

【问题讨论】:

  • > "$filename" 实际上发生在cat 之前并覆盖文件的内容!将输出保存到一个新文件中,并在tr 完成后使用mv 将旧文件替换为新文件。我刚刚链接的另一个问题看起来有一些可能对您有所帮助的答案(例如,sponge)。

标签: bash loops redirect


【解决方案1】:

您可以使用sed 执行此操作,它可以选择将结果写回输入文件。

sed -i 's/,//g' "$dir/*"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-12
    • 2021-11-04
    • 2021-11-05
    • 2018-11-07
    • 2012-05-21
    • 2020-03-26
    • 2011-10-04
    相关资源
    最近更新 更多