Ответ 1
Используя sed, замените каждый символ на себя, за которым следует новая строка:
sed 's/./\0\n/g' -i filename
У меня есть файл вроде этого:
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
.
Как я могу удалить каждый символ в новую строку?
Используя sed, замените каждый символ на себя, за которым следует новая строка:
sed 's/./\0\n/g' -i filename
sed $'s/./&\\\n/g'
(с BSD sed)
sed 's/./&\n/g'
с GNU sedfold -w1
-w
указывает ширину символовwhile IFS= read -r -n1 -d '' c; do printf %s\\n "$c"; done
-d ''
read
, заданной POSIX, является -r
gawk -F '' 'OFS="\n"{$1=$1}1'
awk 'BEGIN{FS="";OFS="\n"}{$1=$1}1'
в nawk (BSD awk, awk, который поставляется с OS X); он не работает с многобайтными символами, хотяВсе, кроме команды nawk, работали с символами, отличными от ASCII, в моей среде, когда LC_CTYPE
был установлен в локаль UTF-8. Никакие сбитые или разделенные пробелы.
Используйте grep
, например:
$ grep -o . file
$ echo This is a sentence. | grep -o .
или fold
:
$ fold -w1 file
$ echo This is a sentence. | fold -w1
Использование разделителей полей ввода и вывода awk:
awk -F '' -v 'OFS=\n' '{$1=$1}1' filename
или Perl
perl -F// -lane 'print join "\n", @F' filename
Не меньше, чем PaulP.R.O. 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"