Замена '\/'' на sed

Что вам действительно нужно сделать, так это исправить ваш сценарий, чтобы он преобразовывал пути Windows в пути Unix. Один относительно простой способ сделать это — убрать разделители путей из уравнения :, а не указывать полные имена путей для копирования.вы рекурсивно просматриваете каталоги, создавая целевые каталоги на удаленной стороне и указывая только имя файла, а не полный путь.:)

Но пока вы не дойдете до этого момента, вам нужно защитить обратную косую черту от оболочки. Вы можете сделать это, заключив в кавычки одинарные кавычки (обратная косая черта интерпретируется для некоторых символов внутри двойных кавычек ). Обратите внимание, что подстановочный знак находится вне кавычек, поэтому оболочка обрабатывает его как подстановочный знак, а не как литерал*::)

rm -rv '.\'*

Или вы можете сделать это, избегая обратной косой черты (, что также будет работать в двойных кавычках, но здесь двойные кавычки не нужны):

rm -rv.\\*

Я бы посоветовал, прежде чем удалять данные с помощью подстановочного знака, всегда сначала запускать lsс теми же аргументами, а затем использовать стрелку вверх, чтобы вызвать последнюю команду, где вы можете изменить lsна rm. Таким образом, вы сможете увидеть список файлов до того, как они будут удалены, что предотвратит потенциально серьезную ошибку. :)Я также большой поклонник использования -vс rmв подобных случаях.

sauer@lightning:/tmp> ls -vr.\\*
.\innerfile\gitkeep .\gitkeep

.\innerfile:
sauer@lightning:/tmp> rm -vr.\\*
removed '.\gitkeep'
removed directory '.\innerfile'
removed '.\innerfile\gitkeep'
0
22.06.2021, 16:07
3 ответа

С большим количеством побегов:

sed 's/\\\//|/g' < inputfile

Сделать его более читабельным, используя @в качестве разделителя:

sed 's@\\/@|@g' < inputfile
6
28.07.2021, 11:23

Либо:

sed 's/\\\//|/g' your_file

или, используя _в качестве разделителя шаблона, чтобы нам не нужно было экранировать/:

sed 's_\\/_|_g' your_file
3
28.07.2021, 11:23

Использованиеawk:

для файлаinput

$ cat input
bssapi_6 0\/0\/0\/9\/9

Подойдет следующее:

awk '{gsub(/\\\//,"|"); }1' input

Поскольку мы хотим заменить \/на |, здесь и \, и /экранируются как \\и \/соответственно. Поэтому регулярное выражение \\\/.

0
28.07.2021, 11:23

Теги

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