Замените обратную косую черту sed

Tar не является способом скопировать загрузочные разделы. Вы получите только свои файлы, но не дисковую структуру. Если Вы хотите клонировать диск, необходимо использовать Clonezilla. Часто диспетчер начальной загрузки находится на главной загрузочной записи, таким образом, необходимо будет скопировать его, и windows7 имеет скрытый основной раздел (приблизительно 100 МБ), которые могут быть также необходимы. Я был бы reccomend Вы, чтобы просто установить virtualbox, создать изображение диска и восстановить его в виртуальной машине с CloneZilla. Таким образом у Вас '' ll есть свой windows7 в Вашем VM.

3
21.08.2014, 12:34
2 ответа

Где вы используете:

sed -i 's C:\ /root/ g'

вы используете s команду с пробелом, разделяющим разные части команды, что необычно, но полностью действителен. Однако, когда вы ставите перед символом-разделителем обратную косую черту, она обрабатывается не как разделитель, а как часть самого аргумента.

Проблема в том, что обратная косая черта в C: \ экранирует пробел посередине, поэтому s никогда не находит конец замены (теперь g ) и жалуется, что команда не завершена, как вы видели.

По крайней мере, вам нужно экранировать саму обратную косую черту с помощью другой обратной косой черты:

sed -i 's C:\\ /root/ g'

Это сработает, хотя замена пробелов другим символом может быть более четкой.


Что касается использования вами xargs и подкаталогов - xargs здесь не требуется, и find может это сделать, включая обработку файлов в подкаталогах, на свой собственный. Используйте:

find ../ \( -name "*.xml" -o -name "*.conf" \) -exec sed -i -e 's|C:\\|/root/|g' '{}' +

, чтобы find запускал саму команду sed со всеми найденными им именами файлов. Имена файлов вставляются вместо {} , а + означает, что find минимизирует количество запусков команды.

-execdir может быть лучше, чем -exec по определенным причинам безопасности, описанным на странице руководства find ; это нестандартное расширение, но, поскольку вы, кажется, используете инструменты GNU, оно должно быть для вас, если оно вам нужно.

4
27.01.2020, 21:14

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

s
<SPACE>
C
:
Literal <SPACE>
/root/
<SPACE>

Вы сказали sed, что хотите использовать в качестве маркера для выражения, которое вы ищете, и замены. Но sed надеется увидеть нечто вроде:

s
<SPACE>
C
:
Literal \
<SPACE>
/root/
<SPACE>

Чтобы сделать обратный слеш буквальным, дополните его обратным слешем:

sed -e 's C:\\ /root '

Лично я предпочел бы избежать использования пробела. Я бы использовал что-нибудь вроде | или ;. Но у тебя все равно были бы проблемы с обратным слешем. Что действительно забавно, так это то, что вам нужно набрать что-то, чтобы использовать обратный слеш в качестве разделителя. :)

.
2
27.01.2020, 21:14

Теги

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