我有一个包含单词
的文件abciuf.com abdbhj.co.in abcshjkl.org.in.2 abciuf zasdg cbhjk asjk
,包括其他内容。以abci, abdb, abcs, abai
开头的单词是我的要求。因此,我只希望打印以abci, abdb, abcs, abai
开头的单词,例如-abciuf.com abdbhj.co.in abcshjkl.org.in.2 abciuf Azerbaijan
我已经通过grep命令尝试过,但是对我没有帮助
cat /etc/xyz.txt|egrep -o "abdb*|abci*|abcs*|abai*"
cat /etc/xyz.txt|egrep -Eow "abdb*|abci*|abcs*|abai*"
答案 0 :(得分:1)
grep -Eo `\<(abdb|abci|abcs|abai)\S*' </etc/xyz.txt
\<
(或\b
)匹配“单词”(或“单词”边界)的开头(A|B)
匹配A或B \S*
匹配零个或多个非空格字符(直到非非空格字符)
尝试使用grep的-w
选项是一个好主意,但是它对“单词”的定义太严格了(如果遇到.
,匹配就会停止)
*
的答案 1 :(得分:1)
您也可以尝试Perl
perl -ne ' while(/(\b(abdb|abci|abcs|abai)\S+)/g) { print "$1 \n" } '
使用您的输入
$ cat sin15.txt
abciuf.com abdbhj.co.in abcshjkl.org.in.2 abciuf zasdg cbhjk asjk
$ perl -ne ' while(/(\b(abdb|abci|abcs|abai)\S+)/g) { print "$1 \n" } ' sin15.txt
abciuf.com
abdbhj.co.in
abcshjkl.org.in.2
abciuf
$
答案 2 :(得分:0)
使用GNU awk进行多字符RS和RT:
$ awk -v RS='\\<(abdb|abci|abcs|abai)\\S*' 'RT{print RT}' file
abciuf.com
abdbhj.co.in
abcshjkl.org.in.2
abciuf