另一种替换换行符而不是使用 tr 的方法

另一种替换换行符而不是使用 tr 的方法

我使用命令:

tr '\n' ' ' < input.txt > output.txt

tr使用命令将新行转换为空格。

它适用于单个文件 - 但我有多个文件,我需要运行单个命令...类似于以下用于进行文本交换的命令:

find /directory/. -type f -exec sed -i 's/oldtext/newtext/g' {} \;

是否有一个命令可以添加到 bash 脚本(如上面使用 find 的命令)中以删除\n

答案1

即使对于以 开头的所有文件名没有任何循环,这也将起作用file

perl -pe 's/\n/ /g' file*

对于这样的操作,我更喜欢perl。与 sed 具有相同的语法,可移植并且没有所有那些奇怪的 sed 参数。您还可以将-iswitch 应用到 perl (如 sed)来进行就地更改:(perl -i.old -pe ....旧文件将以扩展名 .old 进行备份 - 您可以只使用-i,不会保留备份文件)

如果您愿意,可以find像这样使用命令:

$ find . -type f -name 'file*' -exec bash -c 'tr "\n" " " <$0 >$0.new' {} \;

答案2

您可以简单地循环遍历要运行命令的文件。

for file in ~/Desktop/*.txt
do
tr '\n' ' ' < "$file" > "$file"_output.txt
done;

答案3

perl -i -lpe '$\=$"' file.data

  • -i打开就地编辑。
  • -lORS = RS = "\n"
  • -p设置隐式输入文件读入+自动打印记录。
  • $\ORS设置为 的$" = OFS = space by default
  • 当然,您可以为 perl 命令指定多个文件名。

答案4

这是sed您正在寻找的命令:

find /directory/. -type f -exec sed -i ':begin;$!N;s/\n/ /;tbegin' {} \;

相关内容