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

时间:2010-06-28 17:46:03

标签: linux bash scripting shell sed

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

我有这个:

22791

;

14336

;

22821

;

34653

;

21491

;

25522

;

33238

;

我需要这个:

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

修改

这些命令都没有完美运作。

他们中的大多数都是这样的数据:

22791

;14336

;22821

;34653

;21491

;25522

20 个答案:

答案 0 :(得分:182)

tr -d '\n' < yourfile.txt

修改

如果此处发布的所有命令都不起作用,那么除了换行符之外,还有其他内容。可能你在文件中有DOS / Windows行结尾(虽然我希望Perl解决方案在这种情况下也可以工作)?

尝试:

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

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

答案 1 :(得分:8)

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

必须完成这项工作。

答案 2 :(得分:7)

paste -sd "" file.txt

答案 3 :(得分:4)

您可以在vim中编辑文件:

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

答案 4 :(得分:4)

tr -d '\n' < file.txt

或者

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

或者

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

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

已修改以删除猫科动物滥用行为:)

答案 5 :(得分:4)

使用

head -n 1 filename | od -c 

确定什么是令人讨厌的角色。 然后使用

tr -d '\n' <filename

for LF

tr -d '\r\n' <filename

表示CRLF

答案 6 :(得分:2)

书呆子事实:改用ASCII。

tr -d '\012' < filename.extension   

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

答案 7 :(得分:2)

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

pytest.warns

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

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

对于删除文件末尾的新行也很有用,例如使用 cat file.txt | tr -d '\n' > file2.txt 创建。

答案 8 :(得分:1)

使用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

答案 9 :(得分:1)

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

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

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

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

答案 10 :(得分:1)

xargs也会使用换行符(但会添加最终的尾随换行符):

xargs < file.txt | tr -d ' '

答案 11 :(得分:1)

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

答案 12 :(得分:1)

假设您只想保留数字和分号,假设没有主要的编码问题,以下应该可以做到这一点,尽管它也会删除最后一个“换行符”:

$ tr -cd ";0-9"

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

答案 13 :(得分:1)

使用gedit文本编辑器(3.18.3)

  1. 点击搜索
  2. 点击查找和替换...
  3. 查找字段
  4. 中输入\n\s
  5. 保留替换为空白(无)
  6. 检查正则表达式
  7. 点击查找按钮
  8. 注意:这并不能完全解决OP原来的7岁问题,但是应该帮助一些从SE中找到他们的方式的noob linux用户(比如我)“类似的”如何将我的文本全部放在一个行“问题。

答案 14 :(得分:1)

与今天一样,在vim或nvim中非常容易,您可以使用gJ来加入行。对于您的用例,只需

99gJ

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

答案 15 :(得分: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中已经给出了什么。

答案 16 :(得分:0)

当我从文件中复制代码片段并且我想将其粘贴到控制台而不添加不必要的新行时,我通常会得到这个用例,我最后做了一个bash别名
(如果你好奇,我称之为import { Component, OnInit } from '@angular/core'; declare var Materialize:any; //we declarate the var Materialize for use @Component({ //your code }) export class MyComponentComponent implements OnInit { constructor( ) { //your code } ngOnInit() { // your code } ngAfterViewChecked(){ // Respond after Angular initializes the component's views and child views. Materialize.updateTextFields();// update de fields when the document and the views a are ready // in case that the inputs are empty } updateInformation(){ // your code ... Materialize.updateTextFields(); // update the fields, // is not necesary add the class="active" in the views } }

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

  • xsel -b -o删除新行

  • tr -d '\n'删除重复出现的空格

  • tr -s ' '将其推回我的剪贴板

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

答案 17 :(得分:0)

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

  • 打开gedit

  • 然后 Ctrl + H ,然后在Find文本框\nReplace with中留一个空白,然后填写复选框Regular expression,瞧。

答案 18 :(得分:0)

POSIX classes一起使用sed

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

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

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

示例

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

答案 19 :(得分:0)

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

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