我有一个这样的文件:
This is a sentence.
This is another sentence.
我需要在每个字符后面添加一个新行,这样每行只出现一个字符,例如:
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
.
如何将每个字符删除到新行?
答案 0 :(得分:21)
使用sed将每个字符替换为自身后跟换行符:
sed 's/\(.\)/\1\n/g' -i filename
答案 1 :(得分: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 ''
read
的唯一选项是-r
gawk -F '' 'OFS="\n"{$1=$1}1'
awk 'BEGIN{FS="";OFS="\n"}{$1=$1}1'
in nawk(BSD awk,OS X附带的awk);它不适用于多字节字符当LC_CTYPE
设置为UTF-8语言环境时,除了nawk命令之外的所有命令都在我的环境中使用非ASCII字符。没有折叠或剥离空格。
答案 2 :(得分:9)
使用grep
,例如:
$ grep -o . file
$ echo This is a sentence. | grep -o .
或fold
:
$ fold -w1 file
$ echo This is a sentence. | fold -w1
答案 3 :(得分:5)
使用awk的输入和输出字段分隔符:
awk -F '' -v 'OFS=\n' '{$1=$1}1' filename
或Perl
perl -F// -lane 'print join "\n", @F' filename
答案 4 :(得分:3)
不像PaulP.R.O.'s answer那么短,但如果你想对每个角色做一些操作,那么它很有用:
while read -r -n 1 -d '' -u 9
do
printf "Uppercase '${REPLY^^}', "
printf "lowercase '${REPLY,,}', "
printf "literal $(printf "$REPLY" | uniname -bcegpu | tail -1)"
printf '\n'
done 9< "path"