将每个字符放在一个新行上

Vil*_*age 21 bash

我有这样一个文件:

This is a sentence.
This is another sentence.
Run Code Online (Sandbox Code Playgroud)

我需要在每个字符后面添加一个新行,这样每行只出现一个字符,例如:

T
h
i
s

i
s

a

s
e
n
t
e
n
c
e
.
T
h
i
s

i
s

a
n
o
t
h
e
r

s
e
n
t
e
n
c
e
.
Run Code Online (Sandbox Code Playgroud)
  • 该文件为UTF-8,包含许多非英文字符.
  • 空格或回车是否有自己的线并不重要.

如何将每个字符删除到新行?

Pau*_*aul 21

使用sed将每个字符替换为自身后跟换行符:

sed 's/./\0\n/g' -i filename
Run Code Online (Sandbox Code Playgroud)

  • OS X的等价物:`sed -e's/\(.\)/\1 \'$'\n/g'-i''文件名` (4认同)

Lri*_*Lri 12

  • sed $'s/./&\\\n/g' (与BSD sed)
    • 或者sed 's/./&\n/g'使用GNU sed
    • 不包括换行符的空行
  • fold -w1
    • -w 以字符数指定宽度
    • 不包括换行符的空行
  • while IFS= read -r -n1 -d '' c; do printf %s\\n "$c"; done
    • 包括用于换行的空行 -d ''
    • readPOSIX指定的唯一选项是-r
  • gawk -F '' 'OFS="\n"{$1=$1}1'
    • 或者awk 'BEGIN{FS="";OFS="\n"}{$1=$1}1'在nawk中(BSD awk,OS X附带的awk); 但它不适用于多字节字符
    • 两者都不包括换行符的空行

LC_CTYPE设置为UTF-8语言环境时,除了nawk命令之外的所有命令都在我的环境中使用非ASCII字符.没有折叠或剥离空格.


ken*_*orb 9

grep在示例中使用:

$ grep -o . file
$ echo This is a sentence. | grep -o .
Run Code Online (Sandbox Code Playgroud)

或者fold:

$ fold -w1 file
$ echo This is a sentence. | fold -w1
Run Code Online (Sandbox Code Playgroud)


gle*_*man 5

使用awk的输入和输出字段分隔符:

awk -F '' -v 'OFS=\n' '{$1=$1}1' filename
Run Code Online (Sandbox Code Playgroud)

或者Perl

perl -F// -lane 'print join "\n", @F' filename
Run Code Online (Sandbox Code Playgroud)