Backreferencing с sed

Для grep, sed и awk можно вынудить вывод быть буферизованной строкой. Можно использовать:

grep --line-buffered

Вывод силы, чтобы быть буферизованной строкой. По умолчанию вывод является строкой, буферизованной, когда стандартный вывод является терминалом и блоком, буферизованным иначе.

sed -u

Сделайте выходную строку буферизованной.

Посмотрите эту страницу для получения дополнительной информации: http://www.perkin.org.uk/posts/how-to-fix-stdio-buffering.html

1
28.07.2013, 11:15
2 ответа

Я смог понять это. Вот ответ для будущих посещений вопроса:

sed -r 's/(0[Xx][A-Fa-f0-9]+)\[([0-9]+)\]/\1 \2/g'

1
27.01.2020, 23:21

Я думаю, что Вы ищете, что-то вроде этого:

sed -r 's/(0[xX][[:xdigit:]]+)\[([[:digit:]]+)\]/\1 \2/g'

например:

$ sed -r 's/(0[xX][[:xdigit:]]+)\[([[:digit:]]+)\]/\1 \2/g' <<EOF
> mem+offset: 0x2322AD4[3]  0x232BEEF[12]
> unchanged: 0x22343AF word[2] 7E[word]
> EOF

mem+offset: 0x2322AD4 3  0x232BEEF 12
unchanged: 0x22343AF word[2] 7E[word]
$

Примечание: без 0[xX] это полагало бы, что d[2] заменим во второй входной строке.

3
27.01.2020, 23:21
  • 1
    Это не работало даже при том, что я не вижу что случилось с ним.. возможно, sed deosn't распознают :digit:?. Однако я смог понять это, прежде чем я пересмотрел свой вопрос. Спасибо все же. –  Fadi Hanna AL-Kass 29.07.2013, 04:18
  • 2
    @FadiHannaAL-Kass: Только из любопытства, что ОС Вы используете? На MacOS/FreeBSD, вероятно, необходимо использовать -E вместо -r; У меня нет одного из тех для попытки. Но примером выше является cut&paste от моего терминала (человечность 12.04). (Это могла также потенциально быть Ваша локаль, я предполагаю.) –  rici 29.07.2013, 05:13
  • 3
    я выполнил команду на Ubuntu 13.04. У меня действительно есть iMac все же. Я выполню команду на нем и сообщу, знают о результате :-) –  Fadi Hanna AL-Kass 29.07.2013, 05:44

Теги

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