gpt4 book ai didi

bash - 如何使用 Find-exec 和 Tr 处理大量文件

转载 作者:行者123 更新时间:2023-11-29 09:04:39 25 4
gpt4 key购买 nike

我在 bash 中的 find 和 exec 上遇到了一些麻烦:

假设我有一堆文件,我需要替换其中的'\r'字符。(上一个问题:Joining Columns on Command Line with Paste or PR Not Working)对于每个文件,我想读取它,并替换所有'\r',并且然后将其写回相同的文件名:

我使用的命令是 find 。 -执行猫{} | tr -d "\r"> {}\;,但我收到两个错误:

tr: extra operand `;'
Only one string may be given when deleting without squeezing repeats.
Try `tr --help' for more information.
find: missing argument to `-exec'

似乎 tr 正在解释 ';'成为一个论点,而 -exec 没有识别它。有没有办法改变这个?我还将 {} 创建为目录中的一个文件,而不是用 {} 代替文件名。

我也试过:

find . -exec cat {} | tr -d "\r" > "new_{}"; \;

但是 "new_{}" 不会变成 "new_filename",bash 只是照字面意思创建一个名为 "new{}"

谢谢!

最佳答案

如果要重定向与 -exec 一起使用的命令的输出,则需要执行 shell 命令。此外,您需要将输出重定向到新文件并将其移回原始文件名。

说:

find . -type f -exec sh -c 'tr -d "\r" < "{}" > "{}".new && mv "{}".new "{}"' -- {} \;

另一种方法是使用 sed:

find . -type f -exec sed -i 's/\r//' {} \;

dos2unix(如 kojiro 所指出):

find . -type f -exec dos2unix {} \;

关于bash - 如何使用 Find-exec 和 Tr 处理大量文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22768645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com