如果记录包含单词和一些字符(可选),我想打印整个记录。脚本:
/mount[ein]{0,2}/{
print $0}
不幸的是,它不起作用。没有“{”和“}”,它就可以工作。我尝试在“{”之前使用“\”:
/mount[ein]\{0,2\}/{
print $0}
其他示例。对于文件:
mountx
mounte
mountee
mounteee
awk:
awk '/mount[ein]{0,2}$/' file
结果:
//没有什么
系统:Debian 7.8 Linux ibm 3.2.0-4-amd64 #1 SMP Debian 3.2.68-1+deb7u1 x86_64 GNU/Linux
答案1
您的正则表达式既适用于 POSIX 兼容,awk
也适用于 GNU awk
。
鉴于字符e
、i
和n
必须出现零到三次,但没有进一步的限制,因此可以从模式中删除此部分,因为mount
后面跟着任何字符或什么都不匹配。动作 ( print $0
) 也是默认动作,无需指定。
您的命令可以简化为:
awk '/mount/'
如果您想要使用该范围,则需要在其后指定一些内容,这里有一个示例:
$ cat input
foo
mountx
mounte
mountee
mounteee
$ /usr/xpg4/bin/awk '/mount[ein]{0,2}$/' input
mounte
mountee
那是在 Solaris 上,POSIX 就awk
位于其中/usr/xpg4/bin
。
基于 Debian 的 Mint 17.1 上的行为相同:
$ awk -V | head -1
GNU Awk 4.0.1
$ awk '/mount[ein]{1,2}$/' input
mounte
mountee
然而,声称符合 POSIX 标准的 似乎mawk
并不支持间隔(括号)表达式。
$ mawk -W version
mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan
$ mawk '/mount[ein]{1,2}$/' input
$
这是一个已知的漏洞。
答案2
示例 tst.txt:
mountx
mounte
mountee
mounteee
awk(GNU Awk 3.1.7)脚本
awk --re-interval '/mount[ein]{0,2}$/' tst.txt > tst1.txt
结果
mounte
mountee
人 awk
-W re-interval
--re-interval
Enable the use of interval expressions in regular expression matching (see Regular Expressions, below). Interval expressions were not traditionally available in the AWK
language. The POSIX standard added them, to make awk and egrep consistent with each other. However, their use is likely to break old AWK programs, so gawk only pro-
vides them if they are requested with this option, or when --posix is specified.
答案3
不确定您的 mount 命令格式,并且该问题被列为“awk”问题,但您的评论中没有 awk。
这就是你要找的东西吗?
“从文件中打印所有包含 0 的行”(或任何你要搜索的字符串) - 使用命令
cat temp.txt | grep 0 | awk '{print $0}'
将导致
0 9 8 7 6 5 4 3 2
5 4 3 2 1 0 9 8
其中 temp.txt 是
1 2 3 4 5 6 7
0 9 8 7 6 5 4 3 2
9 8 7 6 5 4
8 7 6 5 4 3
7 6 5 4 3
6 5 4 3
5 4 3 2 1 0 9 8
4
3
2