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