Почему это не работает, когда я добавляю его в текущий sed выполняется?

Еще одна причина, по которой вам необходимо редактировать эти файлы, заключается в том, что вы редактируете файлы в образе файловой системы, который вы будете загружать в другой системе, и вам нужно отладить эту систему после загрузки. Например, эфемерная файловая система MAAS, используемая при неудачном вводе в эксплуатацию или в режиме восстановления.

Никогда не говори никогда... если ты этого не хочешь.

1
12.12.2015, 01:17
1 ответ
sed 'expression;expression' 

совпадает с

sed -e 'expression' -e 'expression'

, что в некоторых простых случаях совпадает с

sed -e 'expression' | sed -e 'expression'

В вашем случае (из того, что я вижу ), вы пытаетесь изменить все &на <. Затем все <в новые строки, а затем, наконец, вы добавляете <в начало строк:

s/\&/\</g;s/\</\
/g;s/^/\</g

С заданным вводом этот sedскрипт выполнит следующие действия с BSDsed:

$ sed -f script.sed file
<
<

<

<

Или с GNUsed:

$ gsed -f script.sed file
<
<
str
<
int
<
int

Почему это?

  1. Во-первых, в файле (нет &\перед &можно дополнительно опустить ), поэтому первое выражение — это no -op.
  2. Второе выражение соответствует \<, которое является (началом границы )слова. Честно говоря, я немного озадачен тем, почему текст удаляется BSD sed(. Я посмотрю, является ли это ошибкой OpenBSD sed). Так что это вставляет новую строку в начале каждого слова файла примера.
  3. Третье выражение, все еще работающее с той же (, теперь измененной )строкой ввода, вставляет <в начале строки.

В отличие от этого, единственное выражение s/^/\</g(, в котором \перед <и модификатор gне нужны ), будет просто вставлять <в начале каждого линия.


Следуйте за -вверх :Было подтверждено, что в sedреализации на OpenBSD 6.1 -была ошибка, связанная с добавлением строки перед строкой, начинающейся со вставленной новой строки. Патч отправлен.

0
28.01.2020, 01:29

Теги

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