重要提示:我不是在谈论文本编辑器!
我需要从文本文件中提取(stdout 可以)一个矩形文本。矩形应该是行 l1 和 l2 以及列 c1 和 c2 之间的文本。
我已经可以用头、尾和切口在一根漂亮的管子上做到这一点,并且想知道是否有一种工具可以“一次性”完成这一切(tm)。
任何想法?
答案1
您可以使用 sed,它非常灵活。例如,要打印第 2 行到第 5 行,以及从第 3 列开始的 4 列:
sed -n '2,5 s/^.\{3\}\(.\{1,4\}\).*$/\1/p'
-n
表示如果没有匹配则不打印行2,5
表示仅适用于 2 至 5 行s/1/2/p
表示用 2 代替 1 并打印^.\{3\}
匹配行首 (^) 的任何字符,精确 3 次\( \)
选择我们将\1
在替换部分中使用输出的内容.\{1,4\}
选择任意字符一次,最多出现 4 次.*$
匹配任意字符直到行尾
总之,这将实现您想要的效果。
编辑:
以前的解决方案缺少少于 4 个字符的行。
更好的解决方案是:
sed -n '2,5 s/^.\{0,3\}\(.\{0,4\}\).*$/\1/p'
如果行少于所需字符数,则将放置空行,方法是输出前允许 0 列,输出中允许 0 列。