如何在文本文件中用换行符/输入替换空格?


18

我有一个名为“ example”的简单文本文件。

使用终端命令阅读: cat example

输出:

abc cdef ghi jk lmnopq rst uv wxyz

我想(转换)转换为以下形式:(的预期输出cat example

abc
cdef
ghi
jk
lmnopq
rst
uv
wxyz

如何通过命令行执行此操作?

(这只是一个示例文件,我想转换单词在垂直列中的位置)


Answers:


37

几种选择:

  1. 经典用法tr

    tr ' ' '\n' < example
    
  2. 采用 cut

    cut -d ' ' --output-delimiter=$'\n' -f 1- example
    
  3. 采用 sed

    sed 's/ /\n/g' example
    
  4. 采用 perl

    perl -pe 's/ /\n/g' example
    
  5. 使用外壳

    foo=$(cat example); echo -e ${foo// /\\n}
    

例如,sed我需要添加一个$以使bash替换为实际的换行符,即:sed $'s/ /\\\n/g' example
acumartini

上面的OSX sed和gnu-sed的示例:sed $'s/ /\\n/g'
acumartini

16

试试下面的命令

awk -v RS=" " '{print}' file

要么

awk -v RS='[\n ]' '{print}' file

例:

$ awk -v RS=" " '{print}' example
abc
cdef
ghi
jk
lmnopq
rst
uv
wxyz

说明:

RS(记录分隔符)是内置的awk变量。在第一个命令中,给Record分隔符变量的值是空格。因此,awk会在发现空间时中断打印行。

在第二个命令中,给RS变量的值是空格或换行符。此命令消除了运行第一个命令时出现的多余空白行。


8

您可以使用xargs

cat example | xargs -n 1

或更好

xargs -n 1 < example

6
xargs -n 1 < example为您节省
一只


1

没有人发布python,因此是这样的:

python -c "import sys;lines=['\n'.join(l.strip().split()) for l in sys.stdin.readlines()];print('\n'.join(lines))" < input.txt 

我们将输入文件重定向到python的stdin流中,并逐行读取它。每行都将其尾随的换行符剥离,分割为多个单词,然后重新连接为一个字符串,其中每个单词都由换行符分隔开来,以确保每行有一个单词,并避免在相邻的多个空格时插入多个换行符彼此。最终,我们得到了字符串列表,然后再次将其连接成更大的字符串,并打印到stdout流中。以后可以使用重定向将其重定向到另一个文件> out.txt


0

与上面的“ tr”类似,但有以下补充:

  • 也适用于标签

  • 将多个空格或制表符转换为1个换行符

    tr -s '[:space:]' '\n' < example
    
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.