Как добавить фиксированный текст до и после каждого элемента списка в txt-файле?

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

#!/bin/bash

ifstat -q -i wlan0 -S 0.1 1 | perl -n -e '/(\d+\.\d+).*(\d+\.\d+)/ && print "Down: $1 KBps - Up: $2 KBps\n"'

Образец вывода:

Down: 4.25 KBps - Up: 0.00 KBps

Особая благодарность Эгилю за его ответ, который указал мне к ifstat.

1
задан 17 January 2016 в 23:54

4 ответа

Используйте sed:

sed 's/^/SOMETEXT1\nSOMETEXT2\n/; s/$/\nSOMETEXT3/' input.txt
2
ответ дан 23 May 2018 в 14:13
  • 1
    Разве это не было бы хорошим кандидатом для менее используемых команд i и a, например. [F3]? – steeldriver 17 January 2016 в 23:34
  • 2
    @steeldriver. Да, это скорее всего быстрее. Спасибо. – Florian Diesch 17 January 2016 в 23:39

Я заметил, что ваш список примеров начался с SOMETEXT3, поэтому я написал пример ниже с этим.

#!/bin/bash
sourceList=/path/to/source.list
newfile=/path/to/newfile

while read Line; do
  echo $SOMETEXT3 >> $newfile
  echo Line >> $newfile
  echo $SOMETEXT1 >> $newfile
  echo $SOMETEXT2 >> $newfile
done < $sourceList
0
ответ дан 23 May 2018 в 14:13

Использование Perl:

perl -ne 'print("SOMETEXT1\nSOMETEXT2\n${_}SOMETEXT3\n")' file
-n: заставляет Perl предполагать следующий цикл вокруг вашей программы, что заставляет его перебирать аргументы в имени файла несколько как sed -n или awk:
LINE:
  while (<>) {
      ...             # your program goes here
  }
[ f6]: может использоваться для ввода одной строки программы. print("SOMETEXT1\nSOMETEXT2\n${_}SOMETEXT3\n"): печатает SOMETEXT1, за которым следует новая строка, а затем SOMETEXT2, а затем новая строка, за которой следует текущая строка, а затем SOMETEXT3.

Удовлетворяет потенциальным специальным символам, таким как, например, \ и " в SOMETEXTN выбраны правильно.

Чтобы обработать файл на месте, вы можете добавить swift -i к команде:

perl -i -ne 'print("SOMETEXT1\nSOMETEXT2\n${_}SOMETEXT3\n")' file
% cat file
apple
banana
grape
orange
% perl -ne 'print("SOMETEXT1\nSOMETEXT2\n${_}SOMETEXT3\n")' file
SOMETEXT1
SOMETEXT2
apple
SOMETEXT3
SOMETEXT1
SOMETEXT2
banana
SOMETEXT3
SOMETEXT1
SOMETEXT2
grape
SOMETEXT3
SOMETEXT1
SOMETEXT2
orange
SOMETEXT3
0
ответ дан 23 May 2018 в 14:13

Вы можете использовать Vim в режиме Ex:

ex -sc '%s/.*/SOMETEXT1\rSOMETEXT2\r&\rSOMETEXT3/|x' file
% выбрать все строки s заменить x сохранить и закрыть
0
ответ дан 23 May 2018 в 14:13

Другие вопросы по тегам:

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