Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash输出下降了吗?_Bash_Awk_Grep_Output - Fatal编程技术网

Bash输出下降了吗?

Bash输出下降了吗?,bash,awk,grep,output,Bash,Awk,Grep,Output,这是我的密码。它基本上只是grep'和使输出看起来更好。 它工作得很好,但是如果我使用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))" "$

这是我的密码。它基本上只是grep'和使输出看起来更好。 它工作得很好,但是如果我使用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

如果我输入一个非正则表达式字符串,那么输出和计数都可以。被grep'ed的文件是一个公司主机文件,因此我无法共享成功的输出,但基本上匹配的行位于搜索和查找行之间。

不是因为第一个grep中的内容以某种方式被删除,如果没有终端控制字符清除屏幕或向上移动光标,这是不可能的,因为在awk启动之前,该输出已经发送到终端。相反,第二个grep是使用不同的参数运行的,因此,只有输出到wc-l然后到awk的grep才将其参数解析为PCRE样式的正则表达式

更改:

grep -i $item /etc/hosts
致:


一些引用问题,BTW——考虑在这里提问题之前找到的问题。我也倾向于建议使用BASH-X YuScript来生成跟踪级别的日志记录,从而尽早减少错误行为。例如,您可以看到GRIP是如何被调用的,然后用同样的方式调用它并比较结果。我不知道丢失输出文本是什么意思-myVar包含awk的输出,因此,如果该变量为非空,根据定义,该文本不能丢失。您的意思是希望直接从先前的调用发出文本吗?请注意,您在该调用中没有使用-P,因此之前的grep实例没有将您的输入视为PCRE?我的意思是,如果我使用非regex参数运行脚本,则在搜索和查找之间会有大量行。我只希望看到它们像上面那样夹在一起,如果它显示为find0。所以我的意思是我不知道这些线都到哪里去了。如果我不使用正则表达式,它们就会出现。
grep -i $item /etc/hosts
grep -i -P "$item" /etc/hosts