2012-03-27 35 views
17

我有一個這樣的文件:配售的每個字符在新行

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格式,並且包含許多非英文字符。
  • 如果空格或回車符有自己的行,則無關緊要。

如何將每個字符移除到新行?

+0

你想在單獨的行或每一個角色每一個字節? – 2012-03-27 23:27:17

+0

LOL我總是有相反的問題,我最終編寫了循環,當它們應該在句子中時,它們將每個字符打印在自己的行上:P – 2015-02-03 23:31:54

回答

18

使用SED替換本身每個字符跟着一個換行符:

sed 's/\(.\)/\1\n/g' -i filename 
+3

OS X的等價物:'sed -e's/\(。\)/\ 1 \'$'\ n/g'-i''filename' – jkukul 2016-01-02 17:51:01

+1

你能解釋一下這個命令嗎 – juggernaut1996 2017-01-01 17:44:47

5

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

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

或Perl

perl -F// -lane 'print join "\n", @F' filename 
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" 
8
  • 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'
    • 或在nawk(BSD awk,OS X附帶的awk)中的awk 'BEGIN{FS="";OFS="\n"}{$1=$1}1';它不與多字節字符的工作,雖然
    • 也不包括空行的換行符

之外的所有NAWK命令,在我的環境中的非ASCII字符的工作時,LC_CTYPE被設置爲UTF-8語言環境。沒有摺疊或剝離空間。

7

使用grep,例如:

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

fold

$ fold -w1 file 
$ echo This is a sentence. | fold -w1 
相關問題