Вы говорите, что вам нужно приложение Node для чтения из канала, тогда давайте сделаем это:
node x.js <"$my_named_pipe"
Затем вы говорите, что хотите, чтобы функция считывала вывод оттуда, тогда давайте сделаем и это тоже:
node x.js <"$my_named_pipe" | delete_lock
Обратите внимание, что |
является терминатором команды, что означает, что в
command1 | command2 <thing
это command2
, который читается из thing
.
Ответы на комментарии:
Функция delete_lock
может считывать свой стандартный ввод, поступающий из приложения Node. Если, например, ему нужно выполнить какое-то действие в зависимости от шаблона в выводе приложения Node, он может захотеть использоватьgrep
:
delete_lock () {
if grep -q 'PATTERN'; then
# some command here
fi
}
Если вам нужно, чтобы приложение Node продолжало работать после того, как действие было выполнено функцией, вам нужно продолжать потреблять его выходные данные:
delete_lock () {
if grep -q 'PATTERN'; then
# some command here
fi
cat >/dev/null
}
В противном случае приложение Node получит сигнал SIGPIPE и прекратит работу.
Я предлагаю это:
sed 's;^[[:blank:]]*<[^>]*>[[:blank:]]*\(.*\)<.*>.*$;\1;' foo
Выход:
Text here that I want to keep
Это работает, если теги содержат более одной буквы и любую букву, а также удаление всех пробелов в начале и в конце, например:
<br> Text here that I want to keep </br> (31ca4166c37a_.76)
С любым POSIX awk (предполагает, что все <s>
и </s>
идут упорядоченными парами в каждой строке, как в предоставленном вами образце ввода):
$ awk -F'[[:blank:]]*</?s>[[:blank:]]*' '{print $2}' file
Text here that I want to keep
С помощью GNU awk для \s
сокращение:
$ gawk -F'\\s*</?s>\\s*' '{print $2}' file
Text here that I want to keep
С любым POSIX-кодом:
$ sed 's|[[:blank:]]*<s>[[:blank:]]*\(.*[^[:blank:]]\)[[:blank:]]*</s>.*|\1|' file
Text here that I want to keep
Вы можете попробовать команду ниже
команда
sed -e 's/<\/\?s>//g' -e 's/(.*)//g' filename
выход
Text here that I want to keep
Использование старого доброго ed
для редактирования файлов:
for file in dir/*.txt; do
ed -s "$file" <<'EOF'
s!^<s> *!!
s!</s>.*$!!
w
EOF
done
(Как правило, большую часть времени вы думаете о не -стандарте sed -i
, вместо этого вам следует подумать об использовании ed
.)