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
Если вы просто хотите 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
Если вы хотите выполнить любую операцию с файлами, в которых доступны строки, используйте приведенный ниже:
#!/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]#
Вы можете использовать файл со строками, которые хотите найти:
файл.txt
foo
bar
А потом
find /path/to/file -type f -name "*.html" -exec grep -l -f file.txt '{}' \; -print