Похоже, в вашей системе заканчивается свободная оперативная память и происходит подкачка. При возникновении проблемы проверьте вывод free -h
. Кроме того, программы мониторинга системы, такие как htop
и atop
, могут предоставить более широкий обзор текущей загрузки системы.
Это будет работать с версией sed для gnu (по умолчанию на каждом Linux)
echo -n '#HelloMyName@#IsAdam@#NiceToMeetYou@' | sed 's/#\([^@]*\)@/\1\n/g'
дай мне
HelloMyName
IsAdam
NiceToMeetYou
На макосах
echo -n '#HelloMyName@#IsAdam@#NiceToMeetYou@' | sed 's/#\([^@]*\)@/\1\'$'\n''/g'
Это примеры с эхом, то же самое будет работать с файлами.
echo -n '#HelloMyName@#IsAdam@#NiceToMeetYou@' > input.txt
sed 's/#\([^@]*\)@/\1\n/g' input.txt > sequence.txt
В GNU awk(gawk
)использование FPAT
для определения поля как последовательности не-#@
символов:
$ gawk '{$1=$1} 1' FPAT='[^#@]+' OFS='\n' file >> Sequence.txt
$
$ tail Sequence.txt
HelloMyName
IsAdam
NiceToMeetYou
Аналогичный подход, на perl:
perl -lpe '$_ = join "\n", /[^#@]+/g' file >> Sequence.txt
Эта последовательность:
[^#]* # Accept some string of characters that are **not** the start character.
# # Followed by an start character #
[^@]* # Followed by an string of **not** ending characters.
@ # Followed by an ending character.
Повторение несколько раз захватило бы (почти )всю линию.
Вот так:
s/[^#]*#\([^@]\)@/\1\n/g
Это преобразует строку ввода в несколько строк в соответствии с запросом.
Единственное, чего не хватает, это стереть то, что может остаться.
sed 's/[^#]*#\([^@]*\)@/\1\n/g;s/\(.*\)\n.*$/\1/'