Unix 如何仅打印文件中第二个和最后第二个字符相同的行?

Unix 如何仅打印文件中第二个和最后第二个字符相同的行?,unix,awk,sed,grep,Unix,Awk,Sed,Grep,我想打印文件中第二个和第二个最后一个字符相同的所有行,例如,右侧的以下文件注释用于解释,它们在文件中不存在: hello james # second/second-last are 'ee' - match how are you? # 'ou' are you okay? # 'ry' Is it past #

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

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

对它起作用了。非常感谢。但是你能给我解释一下这条命令吗谢谢兄弟的帮助你能告诉我如何从每行打印偶数个单词吗?我的意思是说,打印偶数个单词是。。例如:你好,世界你好,朋友,那么输出是:世界啊,明白了。你最好问另一个问题,这完全不同,而且偏离了主题。请避免给我codez问题。而是显示您正在处理的脚本,并说明问题所在。另请注意:jww给定链接中的链接非常有争议。但很高兴还有其他意见