如何仅在倒数第二个字符和倒数第二个字符相同的文件中打印行?



我想打印文件中倒数第二个字符和倒数第二个字符相同的所有行,例如以下文件(右侧的注释用于解释目的,文件中不存在它们(:

hello james        # second/second-last are 'ee' - match
how are you?       #                        'ou'
are you okay?      #                        'ry'
Is it past         #                        'ss' - match

那么输出应该是

hello james
Is it past

我将如何做到这一点?

您可以使用带有分组和反向引用的grep,例如:

grep -x ".(.).*1." f1.txt

此模式按给定顺序查找:

  • 任何字符:.
  • 捕获组中的另一个任意字符:(.)
  • 任意字符数(包括 0(:.*
  • 之前捕获的同一字符(反向引用(:1
  • 最后,最后一个任意字符:.

-x意味着它必须匹配条线,而不仅仅是它的一部分(与使用--line-regexp相同(。因此,将仅打印匹配的行。

下面是一个比较第二个第一个和倒数第二个字符的awk

awk '{b=split($0,a,"")} a[2]==a[b-1]' file
hello james
Is it past

如果行尾有空格或制表符,可以像这样修剪掉:

awk '{$1=$1;b=split($0,a,"")} a[2]==a[b-1]'
hello james
Is it past

相关内容

最新更新