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


116

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

我有这个:

22791

;

14336

;

22821

;

34653

;

21491

;

25522

;

33238

;

我需要这个:

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

编辑

这些命令都无法完美运行。

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

22791

;14336

;22821

;34653

;21491

;25522

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

Answers:


245
tr -d '\n' < yourfile.txt

编辑:

如果此处发布的所有命令均不起作用,则除了换行符以外,您还有其他用途。可能文件中有DOS / Windows行尾(尽管我希望Perl解决方案即使在这种情况下也能正常工作)?

尝试:

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

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


7
您如何将此输出写入相同或另一个文件?
黄金名称'16

3
我认为tr不适合空行。你怎么看?- -我觉得sed就像是这里所描述的最佳选择stackoverflow.com/q/16414410/54964
莱奥列奥波尔德·赫兹준 영

要将输出路由到另一个文件,只需使用输出重定向。要将其路由到同一文件,请将其通过管道传递到“海绵”(在Debian基本系统上的“ moreutils”软件包中提供)。
plugwash

要将输出写入同一文件,请使用子shellecho -n $(tr -d "\n" < yourfile.txt) > yourfile.txt
andpei

11
perl -p -i -e 's/\R//g;' filename

必须做的工作。


前往perl -pie 's/\R//g' filename
特伦顿

9
paste -sd "" file.txt

1
在Solaris(10)paste -sd ""上,默认情况下在STDIN上不起作用,因此,如果要通过管道传输,请使用: (some command) | paste -sd "" -
JohnGH 2013年

如果您还想删除最后的换行符,则此方法不起作用。它仅删除中间的换行符。
josch

这在Mac OS上不起作用,Sundeep的版本可以。paste -sd'\0' -
特伦顿


4

head -n 1 filename | od -c 

弄清楚什么是冒犯性的人物。然后使用

tr -d '\n' <filename

用于LF

tr -d '\r\n' <filename

用于CRLF



2

使用man 1 ed:

# 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

2

书呆子事实:使用ASCII代替。

tr -d '\012' < filename.extension   

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


2

将sed与POSIX类一起使用

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

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

只需拿您正在使用的任何东西,然后将其传送到

cat filename | sed '/^[[:space:]]*$/d'


sed -i'/ ^ [[:space:]] * $ / d'filename ...用于就地编辑;上述答案将输出到屏幕
BradChesney79 '19


1

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

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

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

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

只要输入不是太大,并且您使用的是Bash(为Bash标记,就可以了),此方法就起作用。如果我现在正在写答案,那就是tr -d '\n' < file.txt,这就是被接受的答案所做的事情(我很惊讶当时没有写它)。这可能只是为了表明“还有另一种方法”。
乔纳森·莱夫勒

1

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

xargs < file.txt | tr -d ' '

1

假设您只想保留数字和分号,那么在没有主要编码问题的情况下,下面的方法应该可以解决问题,尽管这也会删除最后的“换行符”:

$ tr -cd ";0-9"

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


1

使用gedit文本编辑器(3.18.3)

  1. 点击搜索
  2. 点击查找并替换...
  3. 输入\n\s查找
  4. 保留“ 替换为空白”(无)
  5. 选中正则表达式
  6. 点击查找按钮

注意:这并不能完全解决OP最初的7年历史问题,但应该可以帮助一些noob linux用户(如我)从SE那里找到解决方法,并提出类似的“如何将我的文字全部显示在一行上”的问题。


1

今天有同样的情况,在vim或nvim中超级容易,您可以gJ用来连接行。对于您的用例,只需

99gJ

这将加入您的所有99行。您可以99根据要加入的行数来调整数量。如果只加入1条线,那么gJ就足够了。


0

我会用awk做到这一点,例如

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

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

编辑

忘了printf!所以也

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

甚至可能更好,这是使用awk在其他ans中已经给出的。


0

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

xsel -b -o | tr -d '\n' | tr -s ' ' | xsel -b -i
  • xsel -b -o 读我的剪贴板

  • tr -d '\n' 删除新行

  • tr -s ' ' 删除重复空间

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

之后,我将剪贴板的新内容粘贴到控制台中的一行中。


0

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

  • 打开 gedit

  • 然后Ctrl+ H,然后放入Find文本框\nReplace with空白区域, 然后填写复选框Regular expression并确认。


0

还删除文件末尾的换行符

python -c "s=open('filename','r').read();open('filename', 'w').write(s.replace('\n',''))"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.