Как выполнить поиск списка строк с помощью find и grep

awkраствор:

awk -F',' '{ printf "%s%s", $0, ($NF ~ /^".+[^"]$/? "####" : ORS) }' file

Выход:

KY,On,Ind,Yes,1J5Z,KYEEI9,1/1/2016 Contract Code
KY,On,Ind,Yes,"1GH8####",KYEEID,1/1/2016 Contract Code
KY,On,Ind,Yes,1J5Y,KYEEIJ,1/1/2016 Contract Code
0
27.02.2020, 05:28
3 ответа

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

egrep -l "string1|string2|string3" /path/to/directory/*.html 

grep -El "string1|string2|string3" /path/to/directory/*.html

Они оба делают то же самое, но вместо grep -Eиспользуется egrep. Переключатель -lвозвращает файл, в котором появляется строка, а не строку, содержащую ее. Если вам действительно нужно присвоить строки переменной:

export strings='string1|string2|string3'

egrep -l "$strings" /path/to/directory/*.html 

grep -El "strings" /path/to/directory/*.html
0
28.04.2021, 23:22

Если вы хотите выполнить любую операцию с файлами, в которых доступны строки, используйте приведенный ниже:

#!/bin/bash

declare -a STRINGS=$(find /var/www/html/ -type f -name "*.html" -exec grep "this is 
test" {} \; -print)

for string in "${STRINGS[@]}"
do
   echo "${string}"
    echo "${STRINGS}"

done

О/П:

[root@awx html]# sh test.sh
this is test file1
/var/www/html/1.html
this is test file2
/var/www/html/2.html
this is test file1
/var/www/html/1.html
this is test file2
/var/www/html/2.html
[root@awx html]#
0
28.04.2021, 23:22

Вы можете использовать файл со строками, которые хотите найти:

файл.txt

foo
bar

А потом

find /path/to/file -type f -name "*.html" -exec grep -l -f file.txt '{}' \; -print
0
28.04.2021, 23:22

Теги

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