gpt4 book ai didi

awk - 如何打印具有重复字段的行?

转载 作者:行者123 更新时间:2023-12-02 09:01:11 34 4
gpt4 key购买 nike

我需要打印具有重复字段的行,尝试使用 sed 但不起作用。
输入文件有两行:

s1/s2/s3/s4/s5/u0 a1_b2_c3_d4_e5_f6_g7 s1/s2/s3/s4/s5/u1
s1/s2/s3/s4/s5/u0 a1_b2_c3_d4_e5_f6_g7 s1/s2/s3/s4/s5/u0

输出应该只是第二行,因为它具有精确重复的字符串(字段)。
但它使用下面的命令打印两行

sed -rn '/(\b\w+\b).*\b\1\b/ p' input_file

谢谢
RKP

最佳答案

grep如果-P可用或带有 perl

$ cat ip.txt
s1/s2/s3/s4/s5/u0 a1_b2_c3_d4_e5_f6_g7 s1/s2/s3/s4/s5/u1
s1/s2/s3/s4/s5/u0 a1_b2_c3_d4_e5_f6_g7 s1/s2/s3/s4/s5/u0
2.5 42 32.5 abc
3.14 3.14 123
part cop par

$ grep -P '(?<!\S)(\S++).*(?<!\S)\1(?!\S)' ip.txt
s1/s2/s3/s4/s5/u0 a1_b2_c3_d4_e5_f6_g7 s1/s2/s3/s4/s5/u0
3.14 3.14 123

$ perl -ne 'print if /(?<!\S)(\S++).*(?<!\S)\1(?!\S)/' ip.txt
s1/s2/s3/s4/s5/u0 a1_b2_c3_d4_e5_f6_g7 s1/s2/s3/s4/s5/u0
3.14 3.14 123
  • (?<!\S)断言没有非空白字符
  • (\S++)捕获所有非空白字符,所有格量词确保部分字段不匹配
  • .*任意数量的中间字符
  • (?<!\S)\1(?!\S)匹配整个字段,对非空白字符进行礼貌的环视断言

关于awk - 如何打印具有重复字段的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55169953/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com