Text-Processing
對擴展命令的理解
我無法完全理解命令的
-t
參數是如何expand
工作的。以下是其手冊頁的摘錄。NAME expand - convert tabs to spaces ... -t, --tabs=N have tabs N characters apart, not 8
製表符 N 個字元分開是什麼意思?我做了一些測試。
root@u2004:~# printf "a\tb\n" a b root@u2004:~# printf "a\tb\n" | od -a 0000000 a ht b nl 0000004 root@u2004:~# printf "a\tb\n" | expand | od -a 0000000 a sp sp sp sp sp sp sp b nl 0000012 root@u2004:~# printf "a\tb\n" | expand -t 4 | od -a 0000000 a sp sp sp b nl 0000006 root@u2004:~# printf "a\tb\n" | expand -t 5 | od -a 0000000 a sp sp sp sp b nl 0000007 root@u2004:~#
如您所見,當我通過時
-t 4
,製表符被替換為 3 個空格。所以,實際上,“製表符間隔 4 個字元”只是意味著製表符被替換為 3 個空格?我無法理解。順便說一句,我不是以英語為母語的人,這可能是一個與英語相關的問題。
它指的是製表位,製表符跳轉到的位置。使用
-t 4
,每四個字元有一個製表位。製表符不會插入固定數量的空格,而是跳轉到下一個這樣的位置,因此添加的空格量取決於製表符之前的文本長度。例如:
$ printf "1\tx\n" | expand -t 4 | od -a 0000000 1 sp sp sp x nl 0000006 $ printf "123\tx\n" | expand -t 4 | od -a 0000000 1 2 3 sp x nl 0000006
當然,重點是讓列對齊:
$ printf "123\tx\n1\tx\n" |expand -t4 123 x 1 x
因此,為了嘗試在視覺上表示它,製表位的位置是這樣的,
^
顯示停止:123412341234... ^ ^ ^
(當然你不能從一開始就使用標籤,所以第一個並不真正存在。)
但是,如果一個欄位比製表位距離長,那會變得一團糟,但是
expand
將列位置列表作為替代,例如,它有一個四寬的列和一個八寬的列:$ printf "%b\n" 'A\t1234567\thello' 'B\t987\tworld' |expand -t4,12 A 1234567 hello B 987 world
在那裡,停靠點是這樣的:
11111111112 012345678901234567890... A 1234567 hello B 987 world ^ ^
我在那裡從零開始編號,以便位置與命令行上給出的數字相匹配。