【问题标题】:Placing every character on a new line将每个字符放在新行上
【发布时间】:2012-03-27 23:15:03
【问题描述】:

我有一个这样的文件:

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
.
  • 该文件采用 UTF-8 格式并包含许多非英文字符。
  • 空格或回车是否有自己的行无关紧要。

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

【问题讨论】:

  • 您希望每个字节都单独一行还是每个字符?
  • LOL 我总是遇到相反的问题,我最终编写了循环,当它们应该在句子中时,将每个字符打印在自己的行上:P

标签: bash


【解决方案1】:

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

sed 's/./\0\n/g' -i filename

【讨论】:

  • OS X 的等价物:sed -e 's/\(.\)/\1\'$'\n/g' -i '' filename
  • 几乎相同,但更简单一点:sed 's/./\0\n/g' -i filename
  • 谢谢@ŠťastnýJakub,我更喜欢这样,所以我编辑了答案
【解决方案2】:
  • 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 '' 的换行符的空行
    • POSIX 指定的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 字符。没有折叠或剥离空间。

【讨论】:

    【解决方案3】:

    使用grep,例如:

    $ grep -o . file
    $ echo This is a sentence. | grep -o .
    

    fold:

    $ fold -w1 file
    $ echo This is a sentence. | fold -w1
    

    【讨论】:

      【解决方案4】:

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

      awk -F '' -v 'OFS=\n' '{$1=$1}1' filename
      

      或 Perl

      perl -F// -lane 'print join "\n", @F' filename
      

      【讨论】:

        【解决方案5】:

        不像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"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-19
          • 1970-01-01
          相关资源
          最近更新 更多