ChatGPT解决这个技术问题 Extra ChatGPT

如何从文本文件中删除换行符?

我有以下数据,我需要将它们全部放在一行中。

我有这个:

22791

;

14336

;

22821

;

34653

;

21491

;

25522

;

33238

;

我需要这个:

22791;14336;22821;34653;21491;25522;33238;

编辑

这些命令都不能完美运行。

他们中的大多数让数据看起来像这样:

22791

;14336

;22821

;34653

;21491

;25522
复制粘贴到浏览器的地址栏或其他文本字段中。 Quick'n'dirty 但适用于少量数据。

E
Elijah Lynn
tr --delete '\n' < yourfile.txt
tr -d '\n' < yourfile.txt

编辑:

如果此处发布的所有命令都不起作用,那么除了用换行符分隔字段之外,您还有其他东西。可能您的文件中有 DOS/Windows 行结尾(尽管我希望 Perl 解决方案即使在这种情况下也能工作)?

尝试:

tr -d "\n\r" < yourfile.txt

如果这不起作用,那么您将不得不更仔细地检查您的文件(例如在十六进制编辑器中)以找出您想要删除的实际字符。


您如何将此输出写入相同或另一个文件?
我认为 tr 不适合空行。你怎么看? - - 我认为 sed 是此处描述的最佳选项stackoverflow.com/q/16414410/54964
要将输出路由到另一个文件,只需使用输出重定向。要将其路由到相同的文件管道,请使用“海绵”(在 Debian 基础系统的“moreutils”包中可用)。
要将输出写入同一文件,请使用子 shell echo -n $(tr -d "\n" < yourfile.txt) > yourfile.txt
@andpei 非常感谢,这是一个简单的 shell 脚本,它采用文件名 ($1) 并执行相同的工作: echo -n $(tr -d "\n" < $1) > $1 将其放入 removeNL .sh 文件和 chmod 777 并运行它 $ ./removeNL yourfile.txt
Z
ZyX
perl -p -i -e 's/\R//g;' filename

必须做好工作。


perl -pie 's/\R//g' filename打高尔夫球
不,-i 有一个参数,所以它不能被弄乱到 -eperl -i -pe ...
V
Vivin Paliath
tr -d '\n' < file.txt

或者

awk '{ printf "%s", $0 }' file.txt

或者

sed ':a;N;$!ba;s/\n//g' file.txt

此页面 here 有许多其他方法可以删除换行符。

编辑以消除对猫科动物的虐待:)


A
Amardeep AC9MF
paste -sd "" file.txt

默认情况下,在 Solaris (10) 上 paste -sd "" 不适用于 STDIN,因此如果您要使用管道,请使用:(some command) | paste -sd "" -
如果您还想删除最后的换行符,这不起作用。它只删除中间换行符。
这在 Mac OS 上不起作用,Sundeep 的版本可以。 paste -sd'\0' -
N
Nagev

previous answer 上展开,这会删除所有新行并将结果保存到新文件中(感谢@tripleee):

tr -d '\n' < yourfile.txt > yourfile2.txt

这比“无用的猫”更好(见评论):

cat file.txt | tr -d '\n' > file2.txt

对于删除文件末尾的新行也很有用,例如使用 echo blah > file.txt 创建的。

请注意,目标文件名不同,很重要,否则您将清除原始内容!


那是useless cat.这里的几个评论线程已经解释了如何将结果重定向到新文件。
感谢您指出这一点,我刚刚看到了一条带有 echo -n $(tr -d "\n" < yourfile.txt) > yourfile.txt 的评论,但之前没有看到它。
这更加令人费解,因为 echo -n 存在众所周知的可移植性问题。这样做的简单明显的惯用方法是 tr -d '\n' <file.txt >file2.txt
我们需要注意读写不能使用相同的文件名,否则文件会为空。
A
Alex Van Liew

您可以在 vim 中编辑该文件:

$ vim inputfile
:%s/\n//g

并用空格替换::%s/\n/ /g
M
MrE

利用

head -n 1 filename | od -c 

弄清楚什么是冒犯的角色。然后使用

tr -d '\n' <filename

对于低频

tr -d '\r\n' <filename

对于 CRLF


j
jasonleonhard

将 sed 与 POSIX 类一起使用

这将删除所有仅包含空格的行(空格和制表符)

sed '/^[[:space:]]*$/d'

只需使用您正在使用的任何内容并将其传输到那个

例子

猫文件名 | sed '/^[[:space:]]*$/d'


sed -i '/^[[:space:]]*$/d' 文件名 ...用于就地编辑;上面的答案将输出到屏幕上
c
carlmund

使用 man 1 编辑:

# cf. http://wiki.bash-hackers.org/doku.php?id=howto:edit-ed 
ed -s file <<< $'1,$j\n,p'  # print to stdout 
ed -s file <<< $'1,$j\nwq'  # in-place edit

m
marky

xargs 也使用换行符(但添加了最后一个尾随换行符):

xargs < file.txt | tr -d ' '

L
LeOn - Han Li

今天有同样的情况,在vim或nvim中超级简单,你可以使用gJ加入行。对于您的用例,只需执行

99gJ

这将加入你所有的 99 行。您可以根据需要加入多少行来调整数字99。如果只是加入 1 行,那么只有 gJ 就足够了。


G
Greg Bacon
$ perl -0777 -pe 's/\n+//g' input >output
$ perl -0777 -pe 'tr/\n//d' input >output

J
Jonathan Leffler

如果数据在 file.txt 中,则:

echo $(<file.txt) | tr -d ' '

'$(<file.txt)' 读取文件并将内容作为一系列单词给出,然后 'echo' 在它们之间用空格回显。 'tr' 命令然后删除所有空格:

22791;14336;22821;34653;21491;25522;33238;

只要输入不是太大并且只要您使用 Bash(标记为 Bash,就可以了),它就可以工作。如果我现在写答案,它将是 tr -d '\n' < file.txt,这是公认的答案所做的(我很惊讶我当时没有写它)。这可能只是为了展示“另一种方法”而写的。
p
peak

假设您只想保留数字和分号,假设没有重大编码问题,以下应该可以解决问题,尽管它也会删除最后一个“换行符”:

$ tr -cd ";0-9"

您可以轻松修改以上内容以包含其他字符,例如,如果您想保留小数点、逗号等。


N
Nikolay Kostov

书呆子事实:改用 ASCII。

tr -d '\012' < filename.extension   

(编辑因为我没有看到具有相同解决方案的该死的答案,唯一的区别是我的有 ASCII)


H
Hastig Zusammenstellen

使用 gedit 文本编辑器 (3.18.3)

单击搜索 单击查找和替换... 在查找字段中输入 \n\s 将替换留空(无) 检查正则表达式框 单击查找按钮

注意:这并不能完全解决 OP 最初的 7 年老问题,但应该可以帮助一些新手 linux 用户(比如我)从 SE 那里找到类似的“如何将我的文本全部放在一行”的问题.


S
ShinTakezou

我会用 awk 来做,例如

awk '/[0-9]+/ { a = a $0 ";" } END { print a }' file.txt

(缺点是 a 在内存中“累积”)。

编辑

忘了printf!所以也

awk '/[0-9]+/ { printf "%s;", $0 }' file.txt

或者可能更好,它已经在使用 awk 的其他 ans 中给出。


M
Mohammad AbuShady

当我从文件中复制代码片段并且我想将其粘贴到控制台而不添加不必要的新行时,我通常会得到这个用例,我最终做了一个 bash 别名
(如果你把它称为 oneline很好奇)

xsel -b -o | tr -d '\n' | tr -s ' ' | xsel -b -i

xsel -b -o 读取我的剪贴板

tr -d '\n' 删除新行

tr -s ' ' 删除重复出现的空格

xsel -b -i 将此推回我的剪贴板

之后,我会将剪贴板的新内容粘贴到控制台或其他任何地方的单行中。


E
Eduard Florinescu

您错过了最明显和最快速的答案,尤其是当您需要在 GUI 中执行此操作以修复一些奇怪的自动换行时。

打开 gedit

然后 Ctrl + H,然后放入 Find 文本框 \n 并在 Replace with a empty space 然后填写复选框正则表达式,瞧。


c
coding

如果要删除文件末尾的换行符,可以使用:

truncate -s -1 file_name.txt

更改将保存在文件中。


c
crizCraig

还要删除文件末尾的尾随换行符

python -c "s=open('filename','r').read();open('filename', 'w').write(s.replace('\n',''))"

标签表明 OP 正在寻找基于 shell 的解决方案。 (FWIW,我个人理解 Python 对这些用例的吸引力)