假设我有一个文本文件
txt.txt
hello supdijfdsfsddsgs
hghgh hsdjghjfhgjfhgjfhg
hghgh yyyyyereuryueyruey
我想打印这些行,以便只有第一个5
字符是序列hghgh
?
所以,它应该打印
hghgh hsdjghjfhgjfhgjfhg
hghgh yyyyyereuryueyruey
egrep 应该如何?
egrep -5 "hghgh" txt.txt
?
答案1
这样就可以做到:
grep '^hghgh' txt.txt
egrep
is just grep -E
(就像fgrep
is grep -F
),但-E
这里不需要,因为我们不需要使用扩展正则表达式。
(基本)正则表达式与行开头的^hghgh
文字字符串匹配。hghgh
它将^
模式锚定到行的开头。
如果你想匹配精确的stringhghgh
位于行的开头,而不是 eg hghghaaaaaa
(其中hghgh
是子字符串),然后在表达式末尾使用\>
or\b
或[[:>:]]
来匹配该单词的结尾:
grep '^hghgh\>' txt.txt
或者,使用awk
第一个字段并进行字符串比较:
awk '$1 == "hghgh"' txt.txt
答案2
有很多方法可以给这只猫剥皮。
使用grep
(grep -E
并且egrep
也可以工作,但这只是grep
这里工作的准系统):
grep '^hghgh' /path/to/input
和sed
:
sed -n '/^hghgh/p' /path/to/input
sed '/^hghgh/!d' /path/to/input
和awk
:
awk '/^hghgh/' /path/to/input
这是以下的缩写:
awk '/^hghgh/ { print $0 }' /path/to/input
或者
awk 'index($0, "hghgh") == 1' /path/to/input
或者
awk 'substr($0, 1, 5) == "hghgh"' /path/to/input