Используя здесь-документ для 'sed' и файла

При создании использования логического раздела окна Ничего себе, тот раздел имеет некоторый идентификатор типа раздела Microsoft и таким образом, это недоступно к Linux.

Удалите тот раздел с помощью Windows и отпуска то неразделенное пространство. Ваш установщик Redhat позволит делить его для удовлетворения потребностям Linux.

10
18.02.2019, 22:52
4 ответа

Можно сказать GNU sed читать сценарий из стандартного входа с -f -, -f значение прочитать сценарий из файла, и - значение стандартного входа, как распространено с большим количеством команд.

sed -f - "$IN" > "$OUT" << SED_SCRIPT
    s/a/1/g
    s/test/full/g
SED_SCRIPT

POSIX sed также поддерживает -f, но использование - поскольку стандартный вход не документируется. В этом случае Вы могли использовать /dev/stdin в системах Linux (и я, кажется, вспоминаю, Солярис имеет это также, но я не могу подтвердить это прямо сейчас),

Используя <<-SED_SCRIPT (с '-' префикс), позволит закрытие SED_SCRIPT тег, который будет расположен с отступом.

14
27.01.2020, 20:01
  • 1
    Спасибо, что Вы сказали работавший, как когда-либо я хотел бы указать, что заключительный маркер не может быть расположен с отступом, иначе он вызывает ошибку в ударе, я предполагаю, что это вызвано тем, что он также включает пробел в заключительный. –  Tristian 16.08.2012, 05:29
  • 2
    Обратите внимание, что Apple OS X sed не поддерживает чтение сценария от стандартного входа. (По крайней мере, не тем способом или любым другим зарегистрированным способом.) –  danorton 24.05.2013, 20:00
  • 3
    @danorton: Я добавил решение, которое не требует поддержки -f - в sed но это требует замены процесса: <( command ). –  pabouk 27.11.2014, 04:09

Я полагаю, что ввод «q», независимо от того, в конце или нет, вернет вас на консоль. Разве это не так на вашей машине?

Изменить: по крайней мере, меньше и journalctl ведут себя так для меня на fedora 20.

-121--244684-

Я подготовил учебное пособие по компиляции Couchbase версии 3.0.1 для тех, кто получает ту же проблему http://kokizzu.blogspot.com/2014/11/how-to-install-couchbase-on-archlinux.html

-121--217668-

Может быть, лучше подход:

OUT=/dev/stdout

IN=my_in_file.txt
sed -s 's/in/out/' < $IN > $OUT
  -or-
sed -s 's/in/out/' > $OUT < $IN

IN=my_in_text
sed -s 's/in/out/' <<< $IN > $OUT
  -or-
sed -s 's/in/out/' > $OUT <<< $IN

:)

-1
27.01.2020, 20:01

В случае, если sed не поддерживает чтение скрипта из stdin (используя -f -), можно использовать замену процесса (доступно в bash, zsh, ksh93):

sed "$IN" > "$OUT" -f <( cat << SED_SCRIPT
    s/a/1/g
    s/test/full/g
SED_SCRIPT)

Закрывающаяся скобка ) должна следовать за конечным разделителем (SEC_SCRIPT) сразу или после новой строки. В случае замены процесса вы можете также использовать echo вместо этого документа:

sed "$IN" > "$OUT" -f <( echo \
"    s/a/1/g
    s/test/full/g" )
5
27.01.2020, 20:01

Почему бы не использовать несколько выражений с -eвот так:

#!/bin/bash
OUT=/tmp/outfile.txt
IN=/my_in_file.txt

sed 
  -e "s/a/1/g" \
  -e "s/test/full/g" \
  $IN > $OUT

Я считаю, что это более читабельно для небольших встроенных сценариев sed. Кстати, вы также можете использовать редактирование места -sed:

sed -i.org
  -e "s/a/1/g" \
  -e "s/test/full/g" \
  $IN

Это позволит сохранить исходный файл в папке ${IN}.orgи применить изменения к входному файлу.

0
22.12.2020, 17:39

Теги

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