Найти имена каталогов, которые не содержат определенного подкаталога

awk -F, '{gsub("SAMS CLUB","SAM'\''S CLUB",$3);print}' filename1 > filename2

Ты был близок --просто не хватило двух частей:

  1. указание awk разделить ввод на поля на основе запятых(-F,
  2. получение одинарной -кавычки в замещающем тексте

Поскольку скрипт 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}
1
26.08.2019, 20:05
1 ответ

Вы можете сделать это с помощью 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и печатается.

3
27.01.2020, 23:22

Теги

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