如何在选项卡后生成以数字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'