Используйте команду regex в awk в bash script

Я пытаюсь прочитать файл регулярных выражений, перебирать их и фильтровать из другого файла. Я так близко, но у меня проблемы с моей переменной $regex var. Я полагаю.

while read regex
do
 awk -vRS= '!/$regex/' ORS="\n\n" $tempOne > $tempTwo
 mv $tempTwo $tempOne
done < $filterFile

$tempOne и $tempTwo - временные файлы. $filterFile - это файл, содержащий регулярные выражения.

3 ответа

$regex не расширяется, поскольку он одинарный. В bash разложения выполняются только в двойных строках:

foo="bar"
echo '$foo' # --> $foo
echo "$foo" # --> bar

Итак, просто сложите свою строку так:

'!'"/$regex/"

и он будет вести себя так, как вы ожидаете. ! не следует оценивать, так как это будет выполнять последнюю команду в вашей истории.


передайте переменную оболочки awk с помощью опции -v

while read regex
do
 awk -vRS= -vregex="$regex" '$0!~regex' ORS="\n\n" $tempOne > $tempTwo
 mv $tempTwo $tempOne
done < $filterFile


Я думаю, что у вас есть проблема с цитированием

$ regex=asdf
$ echo '!/$regex/'
!/$regex/
$ echo "!/$regex/"
bash: !/$regex/: event not found
$ echo "\!/$regex/"
\!/asdf/
$ echo '!'"/$regex/"
!/asdf/

licensed under cc by-sa 3.0 with attribution.