Найдите шаблон с помощью grep, а затем замените его на sed [duplicate]

Очевидно, val, полученное в результате копирования в первый раз, является сломанной символической ссылкой.

  • lsперечисляет val, потому что он существует: есть запись каталога с именем val.
  • cd valжалуется «Нет такого файла или каталога», потому что valявляется неработающей символической ссылкой. cdдолжен получить доступ к цели ссылки, но цель не существует (это определение неработающей символической ссылки).
  • du valпоказывает 0, потому что символическая ссылка не использует место для хранения. (Пробел для имени и метаданных не учитывается.)
  • os.path.existsвозвращает Falseдля неработающих символических ссылок.
  • rmdir valсправедливо жалуется, что valне является каталогом, так как это символическая ссылка.
  • rm valобычно удаляет val, поскольку val— это файл, который не является каталогом.

Вы сообщаете:

lrwxrwxrwx 1 user1 dinfk 4 20 июня 12:05 source_folder -> test

Команда cp -rкопирует символическую ссылку как символическую ссылку. Поскольку исходная_папкаявляется символической ссылкой, целью которой является test, это приводит к тому, что level1/valявляется символической ссылкой, целью которой является test. Целью символической ссылки является простая строка, она ничего не «отслеживает». Символические ссылки, которые не начинаются с /, являются относительными. level1/val— это символическая ссылка, целью которой является test, поэтому она указывает на level1/test. Поскольку level1/testне существует, символическая ссылка не работает.

Позже вы видели:

drwxr-sr-x 2 системы user2 4096 27 августа 19:02 level1/val

На этот раз вы сделали что-то другое и скопировали дерево каталогов.

Чтобы скопировать цель ссылки, а не саму ссылку, вы можете использовать

cp -r source_folder/ level1/val

Косая черта в конце указывает команде cpдействовать с каталогом, на который указывает ссылка, а не с символическим ссылка сама. Если аргумент является каталогом, это не имеет никакого значения.

0
09.12.2016, 08:17
3 ответа

вы можете протестировать полное решение sed

sed -i '/:82 /s/status=D//' file

, где

  • /: 82 / выберите строку с 82
  • s / status = D / замените статус на
  • // ничего такого.
3
28.01.2020, 02:27

Основываясь на ваших данных примера, это должно работать

awk '/:82 /{print $1,$2; next} {print}' inputfile

Вы можете перенаправить вывод этого в другой файл.

awk '/:82 /{print $1,$2; next} {print}' inputfile >> newfile

Обычно я не люблю вносить изменения в исходные данные, если это может помочь.

0
28.01.2020, 02:27

на основе заданного ввод

awk '$2~/:82$/{$NF=""}1' input.txt > output.txt
0
28.01.2020, 02:27

Теги

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