如何从 CLI 中的文件中提取矩形文本?

如何从 CLI 中的文件中提取矩形文本?

重要提示:我不是在谈论文本编辑器!

我需要从文本文件中提取(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 列。

相关内容