我有一个包含数千行的文本文件。每行的最后7个字符是字母和数字的混合体(例如AAP8945或GGR6645(。我想把这些保存在一个单独的文件中。
对不起,我的问题很难解决。
使用GNUgrep
假设你有GNUgrep
:
grep -o -E '.{7}$' input > output
-o
选项的意思是"只输出匹配的内容"(而不是整行(。这是使作业可以使用grep
的关键功能。如果不支持-o
(或等效选项(,grep
就不适合此项工作。
-E
选项用于扩展正则表达式,这意味着.
(任何字符(匹配7次,然后匹配行尾。
没有GNUgrep
如果您没有GNUgrep
(或带有-o
选项或等效选项的兼容grep
(,那么您可以使用sed
(GNU或任何其他变体(:
sed -e 's/.*(.{7})$/1/' input > output
这与行的开头(.*
(相匹配,并捕获行的最后7个字符((…)
(;它用捕获的部分替换整体,并打印结果。如果sed
的变体具有扩展正则表达式(通常为-E
,有时为-r
(,则:
sed -E -e 's/.*(.{7})$/1/' input > output
不同之处在于需要反斜杠的数量。
这两种方式都会完整地打印出任何短行。如果应该省略这些,请使用:
sed -n -e 's/.*(.{7})$/1/p' input > output
sed -n -E -e 's/.*(.{7})$/1/p' input > output
grep -Eo '.{7}$'
或者不带grep:
rev input|cut -c -7|rev >output
双rev
在这里是必要的,因为我不能用cut
从右边指定文本的位置。