0

如何使用 bash 处理一个文件或多个文件?

所以:从文件中读取x,进行一些处理(例如搜索替换)并写入文件x

我知道sed你可以这样做:sed -i "" "s/original/replacement/g",但有时 sed 并没有削减它,我需要一个不同的工具,它缺少一个-i ""-like 选项。

我最近发现自己可以做到以下几点:

( BUFFER="`cat FILENAME`"; echo "$BUFFER" > FILENAME )

它使用环境变量来存储文件的内容。对于非常大的文件,这可能效率不高,并且环境变量的容量可能受到限制。

有不同的方法吗?

我也阅读了这个答案,但我正在寻找一个 bash 解决方案。以某种方式完全适合该任务的开源工具也受到欢迎。

4

2 回答 2

2

周围有许多脚本工具,如 awk、perl、ruby、python,但对于 bash 中的大文件,最好先将输出存储在临时文件中。然后保存回来:

while IFS= read -r LINE; do
    case "$LINE" in
    something_to_exclude|another_to_exclude)
        ;;
    yet_another_to_exclude)
        ;;
    *)
        # This is fine to include.
        echo "$LINE"
        ;;
    eac
done < "$FILENAME" > "$FILENAME".temp

cat "$FILENAME".temp > "$FILENAME"
rm "$FILENAME".temp
于 2013-08-29T15:27:01.507 回答
0

您可以将命令的输出存储在临时文件中,然后将临时文件移到原始文件上。例子:

command <file >tmp && mv tmp file
于 2013-08-29T15:28:55.537 回答