这是我的代码。基本上只是grep'ing,并使输出看起来更好。 它工作正常,但是如果我使用REGEX输入,则输出为空白。计算返回的grep行数的“ myVar”似乎是正确的,但似乎awk正在丢失输出文本。
谢谢。
#!/bin/bash
center() {
termwidth="$(tput cols)"
padding="$(printf '%0.1s' ={1..500})"
printf '%*.*s %s %*.*s\n' 0 "$(((termwidth-2-${#1})/2))" "$padding" "$1" 0 "$(((termwidth-1-${#1})/2))" "$padding"
}
if [ $1 = "-h" ] || [ $# -eq 0 ]; then
echo 'USAGE: ./Check.sh [PATTERN1] [PATTERN2] [PATTERN3] ... [PATTERN20]
Search for PATTERN in the HOSTS file. Patterns can be in the Perl REGEX form.'
else
for item in "$@"
do
center "SEARCHING $item"
grep -i $item /etc/hosts
myVar=$(wc -l <(grep -i -P $item /etc/hosts) | awk '{print $1}')
if [ $myVar -eq 0 ]; then
center "COULD NOT FIND $item"
fi
center "FOUND $myVar IN $item"
done
fi
输出:
$ ./Check.sh '^142.[0-9]+'
=================================================================== SEARCHING ^142.[0-9]+ ===================================================================
================================================================= FOUND 945 IN ^142.[0-9]+ ==================================================================
$ cat /etc/hosts | grep -i -P -c '^142.[0-9]+'
945
如果我输入非正则表达式字符串,则输出和计数都可以。正在复制的文件是公司宿主文件,因此我无法共享成功的输出,但是基本上匹配的行在“ SEARCHING”和“ FOUND”行之间。
答案 0 :(得分:1)
并不是以某种方式删除了第一个grep
的内容(没有终端控制字符清除屏幕或向上移动光标是不可能的,因为该输出已经在{{1}之前发送到终端了}开始)。相反,第二个awk
正在使用不同的参数运行,因此仅 grep
的输出将依次到达grep
然后到达wc -l
完全将其参数解析为PCRE样式的正则表达式。
更改:
awk
收件人:
grep -i $item /etc/hosts