如果第一列中的确切数字与 awk/sed 匹配,则保存行

如果第一列中的确切数字与 awk/sed 匹配,则保存行

所以我的输入如下:

1,somerandomwordsx,some.random.words,random.numbers.word,random
2,somerandoms,random,randomnumber,
1,randomwords,word1,word2,word3
21,randomwords,words.random,unique.word,more.random.words
111,randomword1,random.word2

输出应该是

1,somerandomwordsx,some.random.words,random.numbers.word,random
1,randomwords,word1,word2,word3

我用 awk、grep、sed 尝试了很多方法,但它要么忽略逗号,要么包含每个“1,”匹配,包括“111”,它不应该,只有第一列中具有确切数字 1 的行应该是已保存。

感谢帮助!

答案1

使用awk

$ awk -F , '$1 == 1' file
1,somerandomwordsx,some.random.words,random.numbers.word,random
1,randomwords,word1,word2,word3

我们awk可以将每一行读取为一组由逗号分隔的字段。上面的代码打印第一个字段 ( $1) 所在的所有行1

使用sed

$ sed '/^1,/!d' file
1,somerandomwordsx,some.random.words,random.numbers.word,random
1,randomwords,word1,word2,word3
$ sed -n '/^1,/p' file
1,somerandomwordsx,some.random.words,random.numbers.word,random
1,randomwords,word1,word2,word3

使用grep

$ grep '^1,' file
1,somerandomwordsx,some.random.words,random.numbers.word,random
1,randomwords,word1,word2,word3

通过sedandgrep我们可以使用正则表达式,它的意思是“行首的^1,字符,后跟逗号”。1^表达式锚定到行的开头,并通过在 the 之后匹配逗号,1我们可以避免匹配以11or12等​​开头的行。

第一个sed变体删除与该模式不匹配的所有行,而另一个变体仅打印与该模式匹配的行。效果是一样的。

相关内容