awk -F, '{gsub("SAMS CLUB","SAM'\''S CLUB",$3);print}' filename1 > filename2
Ты был близок --просто не хватило двух частей:
-F,
)и Поскольку скрипт awk заключен в одинарные -кавычки, один из способов сделать это — закончить текст в одинарных -кавычках, вставить одинарную (экранированную )кавычку, а затем возобновить одинарную -] цитируемый текст. Другой способ — использовать переменные :
.awk -F, -v old="SAMS CLUB" -v new="SAM'S CLUB" '{gsub(old,new,$3);print}' filename1 > filename2
Еще один способ — использовать переменную массива ENVIRON
.
old="SAMS CLUB"
new="SAM'S CLUB"
export old new
awk -F, '{gsub(ENVIRON["old"], ENVIRON["new"], $3);print}'
Еще один вариант — сохранить сценарий awk -в файл и вызвать его с помощью:
awk -F, -f awk-script-filename filename1 > filename2
Использование файла сценария позволит вам упростить цитирование:
{gsub("SAMS CLUB","SAM'S CLUB",$3);print}
Вы можете сделать это с помощью find
, но вы также можете использовать цикл оболочки:
for dir in /home2/blogname/*
do
[ -d "$dir"/public_html/wp-content/plugins/better-wp-security ] || printf '%s is missing a public_html/wp-content/plugins/better-wp-security directory\n' "$dir"
done
С помощью GNU найти:
find /home2/blogname -mindepth 1 -maxdepth 1 -exec sh -c \
'test ! -d "$1"/public_html/wp-content/plugins/better-wp-security' findsh {} \; -print
Это запускает небольшой фрагмент оболочки для каждой записи в /home2/blogname --за пределами самого /home2/blogname, заданного -mindepth 1
, а не в каких-либо подкаталогах /home2/blogname/ *, заданного -maxdepth 1
. Фрагмент проверяет, имеет ли данный каталог указанную структуру подкаталогов; если это не так, он проходит test
и печатается.