Существует лидер группы процесса - вид подобных главный процесс - который владеет терминалом,/dev/tty. Группа процесса может быть одним или несколькими процессами.
stty управляют изменениями и настройками терминала дисплеев. Если Вы на самом деле собираетесь использовать UNIX, серьезно рассматривают нахождение, что копия Stevens 'Усовершенствовала Программирование в Среде UNIX'. Терминалы имеют много тяжелого багажа с 1970-х. Вы определите это сразу же. Большинство тех нечетных настроек может быть проигнорировано за исключением специальных вещей как системные консоли UNIX.
awk 'NR==1{print "Exp1"}NR==5{print "Exp2"}1' file
1 в средствах конца {print}
.
sed '1i\
Exp1
5i\
Exp2
' file
Если Вы хотите расширить его до большего количества чисел, awk
делает это легким:
awk 'NR%4==1{print "Exp"++i}1' file
С различными числами мы просто скажем, что sed не является правильным инструментом для задания. Это возможно, но не симпатично.
Как академическое любопытство, здесь это находится в sed:
sed '1{
h
s/^.*$/Exp0/
x
}
x
s/^4//
s/^3/4/
s/^2/3/
s/^1/2/
/^E/ {
s/$/|/
:x
s/0|/1/
s/1|/2/
s/2|/3/
s/3|/4/
s/4|/5/
s/5|/6/
s/6|/7/
s/7|/8/
s/8|/9/
s/9|/|0/
tx
s/^Exp|/Exp1/
p
s/^/1/
}
x' file
Если количество точек данных (я принимаю) в каждом из Ваших экспериментов (снова, я принимаю) всегда равняется 4, можно использовать эту остроту Perl:
perl -ple '$. % 4 == 1 and print "Exp", ++$i' your_file
Как это работает
-p
переключатель говорит Perl циклично выполняться по данному файлу (файлам) линию за линией (по умолчанию) и печатать каждую строку после выполнения безотносительно кода, который Вы предоставляете.-l
переключатель говорит Perl автоматически добавлять новую строку (по умолчанию) каждому print
оператор.-e
переключатель сообщает Perl что независимо от того, что прибывает после того, как это - код для выполнения (код, который будет выполнен перед, каждая строка файла печатается).$.
содержит номер строки, в настоящее время обрабатываемый. Если тот номер строки является конгруэнтным 1 4 по модулю ($. % 4 = 1
) это означает, что мы должны вставить Exp #
перед ним.$. % 4 == 1
и если это верно, мы печатаем Exp ++$i\n
(где \n
был добавлен -l
переключатель). Это работает, потому что неопределенной переменной дает значение нуля Perl, когда это сначала используется в качестве целого числа.Заставить его работать с несколькими файлами
$.
переменная не сбросит свое значение при обработке нескольких файлов сразу. Очевидно, это не то, что Вы хотите. Можно работать вокруг этого путем явного выписывания неявного цикла, созданного -p
в вышеупомянутой остроте, таким образом, можно управлять continue
блок.
perl -le '
while(<>){
$. % 4 == 1 and print "Exp ",++$i
} continue {
print; # Print the current line
if(eof){ # If the next line is the end-of-file
close ARGV ; # Close the current filehandle to reset $.
$i = 0 ; # Reset the experiment counter if you need
}
}
' list_of_your_files
Примечания
Оба из вышеупомянутых решений распечатают измененный файл (файлы) к стандартному выводу. Чтобы эмулировать редактирование на месте (т.е. отредактировать сами файлы), добавьте a -i
переключатель:
perl -pi -le '$. % 4 == 1 and print "Exp", ++$i' your_file
Удостоверьтесь, что Вы не помещаете другой переключатель непосредственно после -i
поскольку это интерпретирует что-либо после него как расширение использования для создания файла резервной копии.
Я рекомендую протестировать без -i
сначала и затем добавьте его, если результаты являются удовлетворительными.
Вам не нужны внешние языки, несколько стандартных команд могут помочь. Например, чтобы вставить что-нибудь в 5-ю строку origin.txt можно сделать:
tmpfile=`mktemp`
head -n4 origin.txt > $tmpfile
echo "I'm line 5 now" >> $tmpfile
tail -n +5 origin.txt >> $tmpfile
mv $tmpfile origin.txt
Я нашел этот вопрос в поисках способа добавить символ комментария (#)в начало назначенной строки в файле. Используя приведенный выше пример и несколько других, я обнаружил, что это команда awk для печати чего-либо в назначенной строке.
awk 'NR==1{print "#"$0; next}1' <file
Строка NR==1
— это линия, которую следует учитывать. print "#"
есть что добавить $0
вставляет в строку, содержащую оставшуюся часть строки под указанным номером next
говорит ему пропустить эту строку (распечатав ее, иначе вы получите ее дважды )и, как упоминалось выше, завершающий 1
вставляет остальную часть файла.
Объединитьhead
иtail
cat <(head -n4 input) <(echo 'Line 5!') <(tail -n +5 input) > output
Замените input
вашим входным файлом и output
вашим выходным файлом.
Преимущества этого метода:
echo line 5!
наcat file-to-insert.txt
awk
, sed
,perl
)awk
иsed
)Недостатки для конкретной рассматриваемой ситуации:
Однострочная команда Perl решит эту проблему:
perl -i -lpe 'print "the line content" if $. == lineNumber' file_name.txt
ed
разгул: v) - то, как сделать это с редактором:printf '%s\n' 1 i Exp1 . 5 i Exp2 . w q | ed file.txt
. Я сохраняю это как комментарий, а не ответ, потому что я не думаю, что любой будет на самом деле использовать этот lol. – evilsoup 02.11.2013, 22:11