我使用命令:
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 参数。您还可以将-i
switch 应用到 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
打开就地编辑。-l
套ORS = RS = "\n"
-p
设置隐式输入文件读入+自动打印记录。$\
是ORS
设置为 的$" = OFS = space by default
。- 当然,您可以为 perl 命令指定多个文件名。
答案4
这是sed
您正在寻找的命令:
find /directory/. -type f -exec sed -i ':begin;$!N;s/\n/ /;tbegin' {} \;