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

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

我有这个:

22791


;


14336


;


22821


;


34653


;


21491


;


25522


;


33238


;

我需要这个:

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

剪辑

这些命令没有一个是完全正常工作的。

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

22791


;14336


;22821


;34653


;21491


;25522
379099 次浏览
tr -d '\n' < file.txt

或者

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

或者

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

这个页面 给你有许多其他方法来删除换行符。

编辑删除猫虐待:)

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

编辑:

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

试试:

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

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

$ perl -0777 -pe 's/\n+//g' input >output
$ perl -0777 -pe 'tr/\n//d' input >output
paste -sd "" file.txt

我会用 awk,例如。

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

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

剪辑

忘了 printf! 还有

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

或者可能更好,它已经在其他使用 awk。

如果数据在 file.txt 中,那么:

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

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

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

使用男人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
perl -p -i -e 's/\R//g;' filename

必须完成任务。

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

xargs < file.txt | tr -d ' '

使用

head -n 1 filename | od -c

弄清楚什么是冒犯的人物。 那就用

tr -d '\n' <filename

低频电话

tr -d '\r\n' <filename

为 CRLF

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

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

假设您只想保留数字和分号,那么以下代码应该可以满足您的需要,假设没有重大的编码问题,不过它也会删除最后一个“换行符”:

$ tr -cd ";0-9"

你可以很容易地修改以上内容,以包括其他字符,例如,如果你想保留小数点,逗号等。

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

tr -d '\012' < filename.extension

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

当我从一个文件中复制一个代码片段并想将其粘贴到一个控制台而不添加不必要的新行时,我通常会遇到这种情况,最后我做了一个 bash 别名
(如果你好奇的话,我把它叫做 oneline)

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

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

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

  • xsel -b -i把这个推回到我的剪贴板

之后,我会将剪贴板的新内容粘贴到一个控制台或任何东西的一线。

使用 gedit 文本编辑器(3.18.3)

  1. 搜索
  2. 找到并替换..。
  3. 找到字段中输入 \n\s
  4. 留空 换成(无)
  5. 选中 正则表达式
  6. 单击 找到按钮

注意: 这并没有完全解决 OP 最初的,7年的问题,但是应该帮助一些菜鸟 linux 用户(像我一样)找到他们的方式从 SE 的类似“我如何得到我的文本都在一行”的问题。

你正在错过最明显和快速的答案,特别是当你需要在 GUI 这样做,以修复一些奇怪的文字包装。

  • 打开 gedit

  • 然后 Ctrl + H,然后把在 Find文本框 \n和在 Replace with一个空白的空间 ,然后填写复选框 Regular expression和瞧。

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

99gJ

这个会连接你们所有的99条线。您可以根据需要调整数字 99来连接多少行。如果只是加入 1行,那么只有 gJ是足够好的。

POSIX 类一起使用 sed

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

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

不管你在做什么,用管道把它输送到那里

例子

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

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

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

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

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

这比“没用的猫”好多了(参见评论) :

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

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

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

我找到了最快的方法:

  1. 通过在命令行中执行此操作来打开 vim
  2. vim inputfile
  3. 按“ :”并输入以下命令以删除所有换行符
  4. :%s/\n//g
  5. 如果某些字符是空格 :%s/ //g,则输入此选项以删除空格
  6. 写入文件以确保保存
  7. :w

同样的格式可以用来删除任何其他字符,你可以使用这样的网站 Https://apps.timwhitlock.info/unicode/inspect 找出你缺少了哪个角色 你也可以用这个来找出其他你看不到的字符,他们也有一个工具 学习其他隐形字符的工具