我想使用grep将每行的最后7个字符移动到另一个文件中



我有一个包含数千行的文本文件。每行的最后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从右边指定文本的位置。

最新更新