在另一个问题中,我询问了如何在使用 ls 时隐藏所有 .pyc 文件,Ignacio 提出以下建议:
正如我上面提到的,这并不准确,因为输出偶尔会错位:
ceasarbautista@hse140:~/Desktop/Statistics/statistics/markov$ ls
README __init__.pyc markov.py matrix2graph.pyc pathfinder.pyc priority_dict.pyc spanning.py
__init__.py graph.py matrix2graph.py pathfinder.py priority_dict.py space.py vector.py
ceasarbautista@hse140:~/Desktop/Statistics/statistics/markov$ ls | grep -v '\.pyc$' | column
README graph.py matrix2graph.py priority_dict.py spanning.py
__init__.py markov.py pathfinder.py space.py vector.py
Run Code Online (Sandbox Code Playgroud)
虽然我得到了满意的答案,但我很好奇:为什么 column 会这样做(并且可以修复它以正确打印)?
Pet*_*r.O 10
在没有任何选项的情况下调用时,column
使每个分隔的字符串与最近的TAB-STOP COLUMN对齐。在终端中,这通常位于每 8 个字符的列上。看看这个例子:
创建一个文件(ztxt
)含有一些标签-字符 \t
分隔的字符串,分布在3条线,其一端与换行字符\n
:
aaa1\taaaaaaaaaaaaaa2\taaaaaaaaaaaaaaaaaaa3\taaa4
bbbbbbb1\tbbb2\tbbb3
ccc1\tccc2
Run Code Online (Sandbox Code Playgroud)
输出:column ztxt
- 与最近的TAB-STOP完美对齐
aaa1 aaaaaaaaaaaaaa2 aaaaaaaaaaaaaaaaaaa3 aaa4
bbbbbb1 bbb2 bbb3
ccc1 ccc2
| | | | | | |
|-------|-------|-------|-------|-------|-------|
Run Code Online (Sandbox Code Playgroud)
要将每个连续字段的 LSH 与其上方的对齐,您需要使用该-t
选项,例如。column -t ztxt
aaa1 aaaaaaaaaaaaaa2 aaaaaaaaaaaaaaaaaaa3 aaa4
bbbbbb1 bbb2 bbb3
ccc1 ccc2
Run Code Online (Sandbox Code Playgroud)
如果您的所有数据都在一个没有任何换行符的长流中,您可以使用过滤器引入它们;例如每4 个字段一个。 sed
可以用这个命令来做。
sed -re 's/(([^\t]*\t){3}[^\t]*)\t/\1\n/g'
Run Code Online (Sandbox Code Playgroud)
默认情况下,该column
命令会将多个相邻的分隔符合并为一个分隔符。为了在sed
过滤器中满足这一点,它还需要:
sed -re 's/\t+/\t/g;'
Run Code Online (Sandbox Code Playgroud)
因此,拆分连续的制表符分隔字符串流的命令,因为每 4 个字符串是:
<ztxt sed -re 's/\t+/\t/g;s/(([^\t]*\t){3}[^\t]*)\t/\1\n/g' | column -t
Run Code Online (Sandbox Code Playgroud)
这种连续输入流的输出是(使用原始样本输入,但通过用制表符替换原始换行符进行修改——它仍然必须保留其尾随 \n):
aaa1 aaaaaaaaaaaaaa2 aaaaaaaaaaaaaaaaaaa3 aaa4
bbbbbbb1 bbb2 bbb3 ccc1
ccc2
Run Code Online (Sandbox Code Playgroud)
如果ls
输出出现乱码,则表明一个或多个文件名中存在不可打印的字符。因此,我建议始终使用该-q
选项ls
。
任何不可打印的字符都将作为问号打印出来。
所以请尝试:
ls -Cq
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11372 次 |
最近记录: |