Linux awk脚本的匹配模式

Linux awk脚本的匹配模式,linux,awk,Linux,Awk,我试图计算以“de”开头和结尾的单词数,但我只能计算有de的单词数。范例 我的输入文件 dende detail DEnaDE de.de de 我的代码: #!/bin/awk -f /^de/&&/de/ 结果: dende de.de detail de 我想得到dende,de.de,DenaDe,de。我在代码中使用了运算符&&所以我不明白它为什么不起作用。有人能纠正我做错了什么吗?你能试试下面的吗 awk '/^[Dd][eE]/&&/[Dd][

我试图计算以“de”开头和结尾的单词数,但我只能计算有de的单词数。范例

我的输入文件

dende
detail
DEnaDE
de.de
de
我的代码:

#!/bin/awk -f
/^de/&&/de/
结果:

dende
de.de
detail
de

我想得到dendede.deDenaDede。我在代码中使用了运算符&&所以我不明白它为什么不起作用。有人能纠正我做错了什么吗?

你能试试下面的吗

awk '/^[Dd][eE]/&&/[Dd][eE]$/' Input_file


你能试试下面的吗

awk '/^[Dd][eE]/&&/[Dd][eE]$/' Input_file


对于IGNORECASE,使用GNU awk:

$ awk -v IGNORECASE=1 '/^de/ && /de$/' file
dende
DEnaDE
de.de
de
对于任何awk:

$ awk '{lc=tolower($0)} (lc ~ /^de/) && (lc ~ /de$/)' file
dende
DEnaDE
de.de
de

对于IGNORECASE,使用GNU awk:

$ awk -v IGNORECASE=1 '/^de/ && /de$/' file
dende
DEnaDE
de.de
de
对于任何awk:

$ awk '{lc=tolower($0)} (lc ~ /^de/) && (lc ~ /de$/)' file
dende
DEnaDE
de.de
de

您也可以使用
grep

$ grep -ix 'de\|de.*de' ip.txt
dende
DEnaDE
de.de
de

$ grep -cix 'de\|de.*de' ip.txt
4
  • -i
    忽略大小写
  • x
    仅匹配整行
  • -c
    打印总计数而不是匹配行
  • de\| de.*de
    match
    de
    作为整行或以
    de
    开始并以
    de
    结束的匹配线

如果不支持
\\\
,请使用
grep-ixE'de | de.*de'
grep-ixE'de(.*de)?
grep-ix-e'de'-de.*de'
等…

您也可以使用
grep

$ grep -ix 'de\|de.*de' ip.txt
dende
DEnaDE
de.de
de

$ grep -cix 'de\|de.*de' ip.txt
4
  • -i
    忽略大小写
  • x
    仅匹配整行
  • -c
    打印总计数而不是匹配行
  • de\| de.*de
    match
    de
    作为整行或以
    de
    开始并以
    de
    结束的匹配线

如果
\\\
不受支持,请使用
grep-ixE'de | de.*de'
grep-ixE'de(.*de)?
grep-ix-e'de'-e'de.*de'
等…

请详细说明为什么输出中没有同样满足条件的行
de
“哦,我的错了。”。假设它在那里。您需要将第二个re锚定到行的末尾。请您详细说明为什么行
de
在输出中不存在也满足正确条件的行?“哦,对了,我的错。它应该在那里。你需要将第二个re锚定到线的末端。是的,它可以工作。非常感谢。/^[DdeE].[DdeE]$/和/^[DdeE]/&&/[DdeE]$/之间有区别吗?在这种情况下,您可以使用单个正则表达式。是的,它可以工作。非常感谢。/^[DdeE].[DdeE]$/和/^[DdeE]/&&/[DdeE]$/之间有区别吗?在这种情况下,您可以使用单个正则表达式。