Ошибки сценария Bash при попытке grep -v -q в операторе if

Вы можете сделать это с помощью подстановки процесса следующим образом:

grep -f <(awk '{print $1 "\n" $3}' filename) otherfile

Это заставит grep прочитать свои шаблоны из файла (флаг -f ), который в данном случае фактически результат процесса awk ... filename , который печатает шаблоны по одному в строке. Затем grep ищет эти шаблоны в otherfile

. Хотя, возможно, менее эффективно, если вы действительно хотите сделать это в конвейере, вы можете сделать это с помощью grep , читающего его шаблоны из стандартного ввода, например

awk '{print $1 "\n" $3}' filename | grep -f - otherfile

Править : увидев правку вашего вопроса об использовании grep, а затем awk, вы можете позволить awk выполнить сопоставление с шаблоном, выполнив:

grep -Ff <(awk '/pattern/ {print $1 "\n" $3}' <(pdftotext 'filename.pdf' -)) otherfile

или как конвейер:

pdftotext 'filename.pdf' - | awk '/pattern/ {print $1 "\n" $3}' | grep -Ff - otherfile
1
28.02.2018, 06:08
1 ответ

Una declaración if aceptará cualquier cosa que produzca un estado de salida, por lo que una Shell incorporado como [otest-o un archivo de disco como grep. Puedes usar ambos:

if [ "$(grep -c '*' file)" = 0 ]
then
  echo 'star symbol not found'
fi

pero realmente no es necesario:

if ! grep -q '*' file
then
  echo 'star symbol not found'
fi

O:

while read x
do
  if ! grep -q '*' <<eof
$x
eof
  then
    printf '%s does not contain star symbol\n' "$x"
  fi  
done < file

O:

awk '!/\*/ {print $0, "does not contain star symbol"}' file
2
27.01.2020, 23:32

Теги

Похожие вопросы