如何同时进行grep和过滤



如何在选项卡后生成以数字2开头、不包括数字26的行

file1.text:

2    0   'C001000'
2    26 'C001000' So we come to step 3
2    0   'C001000'
2    26 'C001000' So we come to step 3

expected output 
2    0   'C001000'
2    0   'C001000'

我的方法cat file1.text|grep'^2'//它用2个抓取所有行

cat file1.txt | grap '^2' $(printf 't') '26'

据我所知,这应该有效:

awk -F't' '$1==2 && $2!=26' ip.txt

这将处理基于制表符的字段。如果第一个字段是2,而第二个字段是而不是26,则将打印该行。

如果您也需要打印以2开头的行(如2a(,请使用:

awk -F't' '$1 ~ /^2/ && $2!=26' ip.txt

只有当第二个字段后面的字符也是制表符时,上述解决方案才会起作用。如果不是这样,那么这可能会起作用,但需要对输入进行更好的描述。

awk -F't' '$1==2 && $2 !~ /^26([[:space:]]|$)/' ip.txt

使用OP注释中的要求:行以2开头,后跟tab,然后排除以26开头的数字-和grep:

$ grep $'^2[t](2[^6]|[^2])' file

使用样本数据输出:

2       0       'C001000'
2       0       'C001000'

解释如下:

  • grep $'t'此语法用于grep for tab
  • ^2[t]行,以2开头,后跟tab
  • (2[^6]|[^2]),然后[我的定义*]不包括以26开头的数字
  • (2[^6]|[^2])基本上是以2开头,后面跟着除6之外的任何东西,或者以除2之外的任何事情开头

使用GNUgrep:

grep -P '^2(?!t26b)' file

其中

  • -P-启用PCRE正则表达式引擎
  • ^2(?!t26b)-匹配
    • ^-字符串的开头(jhere,line(
    • 2-a2
    • (?!t26b)-后面没有标签,26是一个完整的单词(b是一个单词边界(。您可以使用(?!t26(?:t|$))(?!t26(?![^t]))来确保26仅在字符串的制表符/末尾之间匹配

查看在线演示:

s="2    0   'C001000'
2   26  'C001000'   So we come to step 3
2   0   'C001000'
2   26  'C001000'   So we come to step 3"
grep -P '^2(?!t26b)' <<< "$s"

输出:

2   0   'C001000'
2   0   'C001000'

相关内容

  • 没有找到相关文章

最新更新