Как перенаправить стандартный вывод оболочки на первую строку файла?

perl -pale 's#(?:\H+\h+){3}\K\H+#($F[3] =~ /(?:^|;)(Gene:[^:]+)/)[0]#e' input-file.txt 

° в случае отсутствия фиксированного положения гена в четвертом поле можно поступить так, как указано выше.

° мы обнуляем четвертое поле с помощью регулярного выражения (?:\H+\h+){3}\K\H+и быстро заменяем его другим регулярным выражением, используемым в подстановочной части команды s///e.

6
31.08.2020, 06:41
3 ответа

Попробуйте использоватьsed:

sed -i "1 i\
$(date)" test.txt

Формаman:

i \
text Insert text, which has each embedded newline preceded by a backslash.

12
18.03.2021, 23:08

Чтобы записать дату в начало вместо конца file, попробуйте:

{ date; cat file; } >file.new && mv file.new file

Обсуждение

  1. Добавление нового текста в начало файла требует перезаписи всего файла. Добавление нового текста в конец файла требует только написания нового текста.

  2. Энди Далтон предложил просто добавить в конец файла, как обычно, а затем использовать tac fileдля просмотра файла, это хороший вариант.

  3. echo `date` >> test.txtможно заменить более простым и эффективным date >> test.txt.

    Если вы используете bash 4.3 или более позднюю версию, то, как указывает Чарльз Даффи , printf '%(%c)T\n' -1 >>test.txtеще более эффективен.

  4. Пробелы вокруг фигурных скобок обязательны. Это связано с тем, что {и }являются зарезервированными словами оболочки (, в отличие от ключевых слов оболочки , которые не требуют пробелов ).

20
18.03.2021, 23:08

Обратный порядок строк

ex -s +%g/^/m0 +wq file

ex -sрежим редактора vim, эквивалентvim -nes
+wqсохранить команду и выйти
или для баш

tac <<<$(<file) >file

<<<$(<file)эта конструкция служит самодельным -буфером

Запись в первую строку

cat <<<$(date)$'\n'$(<file) >file
echo -e "$(date)\n$(<file)" >file

и

ex -s +'0r!date' +wq file

Извините, я сначала не понял

3
18.03.2021, 23:08

Теги

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