我有以下数据,我需要将它们全部放在一行中。
我有这个:
22791
;
14336
;
22821
;
34653
;
21491
;
25522
;
33238
;
我需要这个:
22791;14336;22821;34653;21491;25522;33238;
编辑
这些命令都不能完美运行。
他们中的大多数让数据看起来像这样:
22791
;14336
;22821
;34653
;21491
;25522
tr --delete '\n' < yourfile.txt
tr -d '\n' < yourfile.txt
编辑:
如果此处发布的所有命令都不起作用,那么除了用换行符分隔字段之外,您还有其他东西。可能您的文件中有 DOS/Windows 行结尾(尽管我希望 Perl 解决方案即使在这种情况下也能工作)?
尝试:
tr -d "\n\r" < yourfile.txt
如果这不起作用,那么您将不得不更仔细地检查您的文件(例如在十六进制编辑器中)以找出您想要删除的实际字符。
perl -p -i -e 's/\R//g;' filename
必须做好工作。
perl -pie 's/\R//g' filename
打高尔夫球
-i
有一个参数,所以它不能被弄乱到 -e
:perl -i -pe ...
tr -d '\n' < file.txt
或者
awk '{ printf "%s", $0 }' file.txt
或者
sed ':a;N;$!ba;s/\n//g' file.txt
此页面 here 有许多其他方法可以删除换行符。
编辑以消除对猫科动物的虐待:)
paste -sd "" file.txt
paste -sd ""
不适用于 STDIN,因此如果您要使用管道,请使用:(some command) | paste -sd "" -
paste -sd'\0' -
在 previous answer 上展开,这会删除所有新行并将结果保存到新文件中(感谢@tripleee):
tr -d '\n' < yourfile.txt > yourfile2.txt
这比“无用的猫”更好(见评论):
cat file.txt | tr -d '\n' > file2.txt
对于删除文件末尾的新行也很有用,例如使用 echo blah > file.txt
创建的。
请注意,目标文件名不同,很重要,否则您将清除原始内容!
cat.
这里的几个评论线程已经解释了如何将结果重定向到新文件。
echo -n $(tr -d "\n" < yourfile.txt) > yourfile.txt
的评论,但之前没有看到它。
echo -n
存在众所周知的可移植性问题。这样做的简单明显的惯用方法是 tr -d '\n' <file.txt >file2.txt
您可以在 vim 中编辑该文件:
$ vim inputfile
:%s/\n//g
:%s/\n/ /g
利用
head -n 1 filename | od -c
弄清楚什么是冒犯的角色。然后使用
tr -d '\n' <filename
对于低频
tr -d '\r\n' <filename
对于 CRLF
将 sed 与 POSIX 类一起使用
这将删除所有仅包含空格的行(空格和制表符)
sed '/^[[:space:]]*$/d'
只需使用您正在使用的任何内容并将其传输到那个
例子
猫文件名 | sed '/^[[:space:]]*$/d'
使用 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
xargs
也使用换行符(但添加了最后一个尾随换行符):
xargs < file.txt | tr -d ' '
今天有同样的情况,在vim或nvim中超级简单,你可以使用gJ
加入行。对于您的用例,只需执行
99gJ
这将加入你所有的 99 行。您可以根据需要加入多少行来调整数字99
。如果只是加入 1 行,那么只有 gJ
就足够了。
$ perl -0777 -pe 's/\n+//g' input >output
$ perl -0777 -pe 'tr/\n//d' input >output
如果数据在 file.txt 中,则:
echo $(<file.txt) | tr -d ' '
'$(<file.txt)
' 读取文件并将内容作为一系列单词给出,然后 'echo' 在它们之间用空格回显。 'tr' 命令然后删除所有空格:
22791;14336;22821;34653;21491;25522;33238;
tr -d '\n' < file.txt
,这是公认的答案所做的(我很惊讶我当时没有写它)。这可能只是为了展示“另一种方法”而写的。
假设您只想保留数字和分号,假设没有重大编码问题,以下应该可以解决问题,尽管它也会删除最后一个“换行符”:
$ tr -cd ";0-9"
您可以轻松修改以上内容以包含其他字符,例如,如果您想保留小数点、逗号等。
书呆子事实:改用 ASCII。
tr -d '\012' < filename.extension
(编辑因为我没有看到具有相同解决方案的该死的答案,唯一的区别是我的有 ASCII)
使用 gedit 文本编辑器 (3.18.3)
单击搜索 单击查找和替换... 在查找字段中输入 \n\s 将替换留空(无) 检查正则表达式框 单击查找按钮
注意:这并不能完全解决 OP 最初的 7 年老问题,但应该可以帮助一些新手 linux 用户(比如我)从 SE 那里找到类似的“如何将我的文本全部放在一行”的问题.
我会用 awk 来做,例如
awk '/[0-9]+/ { a = a $0 ";" } END { print a }' file.txt
(缺点是 a 在内存中“累积”)。
编辑
忘了printf!所以也
awk '/[0-9]+/ { printf "%s;", $0 }' file.txt
或者可能更好,它已经在使用 awk 的其他 ans 中给出。
当我从文件中复制代码片段并且我想将其粘贴到控制台而不添加不必要的新行时,我通常会得到这个用例,我最终做了一个 bash 别名
(如果你把它称为 oneline
很好奇)
xsel -b -o | tr -d '\n' | tr -s ' ' | xsel -b -i
xsel -b -o 读取我的剪贴板
tr -d '\n' 删除新行
tr -s ' ' 删除重复出现的空格
xsel -b -i 将此推回我的剪贴板
之后,我会将剪贴板的新内容粘贴到控制台或其他任何地方的单行中。
您错过了最明显和最快速的答案,尤其是当您需要在 GUI 中执行此操作以修复一些奇怪的自动换行时。
打开 gedit
然后 Ctrl + H,然后放入 Find 文本框 \n 并在 Replace with a empty space 然后填写复选框正则表达式,瞧。
如果要删除文件末尾的换行符,可以使用:
truncate -s -1 file_name.txt
更改将保存在文件中。
还要删除文件末尾的尾随换行符
python -c "s=open('filename','r').read();open('filename', 'w').write(s.replace('\n',''))"
不定期副业成功案例分享
tr
不适合空行。你怎么看? - - 我认为sed
是此处描述的最佳选项stackoverflow.com/q/16414410/54964echo -n $(tr -d "\n" < yourfile.txt) > yourfile.txt