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

时间:2018-09-06 22:25:46

标签: unix awk sed grep

我要打印文件中倒数第二个字符和倒数第二个字符相同的所有行,例如以下文件(右边的注释是出于说明目的,它们不存在于文件中):< / p>

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

我该怎么做?

2 个答案:

答案 0 :(得分:1)

您可以将grep用于分组和反向引用,例如:

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

此模式按给定顺序查找:

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

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

答案 1 :(得分:1)

这是一个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