我知道排序命令可以仅使用每个输入行上的一些信息作为排序键,例如使用
sort -k 2
跳过初始字符序列直到空格;我知道我可以使用不同的字段分隔符与 -t
。
但是,假设我想对输入进行排序,同时忽略前几个字符 - 这些字符不是固定的。例如,这个:
bar10
baz12
foo1
gaa11
quu2
应该变成,仅使用第 4 个字符及以后:
foo1
bar10
gaa11
baz12
quu2
当然,我可以使用更复杂的脚本语言来完成此操作,例如 awk(例如this way)。但我可以做一些更简单的事情吗?
好吧,假设你的前缀没有空格,你可以写:
prefix_length=3
sed -r 's/^(.{'$prefix_length'})/\1 /;' | \
sort -k 2 | \
sed -r 's/^(.{'$prefix_length'}) /\1/;'
它的作用:
sed
命令在(非固定)前缀后面插入一个空格字符sed
命令删除插入的空格字符