Удаление строк из начала и конца файлов .txt в каталоге?

Вы говорите, что вам нужно приложение 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 и прекратит работу.

1
25.03.2020, 11:27
4 ответа

Я предлагаю это:

sed 's;^[[:blank:]]*<[^>]*>[[:blank:]]*\(.*\)<.*>.*$;\1;' foo

Выход:

Text here that I want to keep

Это работает, если теги содержат более одной буквы и любую букву, а также удаление всех пробелов в начале и в конце, например:

<br> Text here that I want to keep    </br> (31ca4166c37a_.76)
0
28.04.2021, 23:19

С любым 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
0
28.04.2021, 23:19

Вы можете попробовать команду ниже

команда

sed  -e 's/<\/\?s>//g' -e 's/(.*)//g' filename

выход

Text here that I want to keep
0
28.04.2021, 23:19

Использование старого доброго edдля редактирования файлов:

for file in dir/*.txt; do
  ed -s "$file" <<'EOF'
s!^<s> *!!
s!</s>.*$!!
w
EOF
done

(Как правило, большую часть времени вы думаете о не -стандарте sed -i, вместо этого вам следует подумать об использовании ed.)

1
28.04.2021, 23:19

Теги

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