所以我的输入如下:
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
通过sed
andgrep
我们可以使用正则表达式,它的意思是“行首的^1,
字符,后跟逗号”。1
将^
表达式锚定到行的开头,并通过在 the 之后匹配逗号,1
我们可以避免匹配以11
or12
等开头的行。
第一个sed
变体删除与该模式不匹配的所有行,而另一个变体仅打印与该模式匹配的行。效果是一样的。