Содержимое sec.csv выглядит примерно так:
00:41 00:11 00:12 32 8 21:59 1:22 29:59
фактически, это время в минутах и секундах или просто в секундах. Привести его к виду hh:mm:ss можно командой:
cat sec.csv | sed -e "/:/ s/\(.*\)/00:\\1/" -e "/:/! s/\(.*\)/00:00:\\1/"
после чего данные выглядят так:
00:00:41 00:00:11 00:00:12 00:00:32 00:00:8 00:21:59 00:1:22 00:29:59
Отрицание указывается знаком "!" в конце конструкции "/:/!"
cat access_log | sed -n '/PATTERN/{=}'
cat access_log | sed -n '/PATTERN/{=;p;}'
cat access_log | sed -n '/PATTERN/{=;p;}'| sed '$!N;s/\n/:/'
| UNIX | SED |
|---|---|
| cat | sed ':' |
| cat -s | sed '1s/^$//p;/./,/^$/!d' |
| tac | sed '1!G;h;$!d' |
| grep | sed '/patt/!d' |
| grep -v | sed '/patt/d' |
| head | sed '10q' |
| head -1 | sed 'q' |
| tail | sed -e ':a' -e '$q;N;11,$D;ba' |
| tail -1 | sed '$!d' |
| tail -f | sed -u '/./!d' |
| cut -c 10 | sed 's/\(.\)\{10\}.*/\1/' |
| cut -d: -f4 | sed 's/\(\([^:]*\):\)\{4\}.*/\2/' |
| tr A-Z a-z | sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/' |
| tr a-z A-Z | sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' |
| tr -s ' ' | sed 's/ \+/ /g' |
| tr -d '\012' | sed 'H;$!d;g;s/\n//g' |
| wc -l | sed -n '$=' |
| uniq | sed 'N;/^\(.*\)\n\1$/!P;D' |
| rev | sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//' |
| basename | sed 's,.*/,,' |
| dirname | sed 's,[^/]*$,,' |
| xargs | sed -e ':a' -e '$!N;s/\n/ /;ta' |
| paste -sd: | sed -e ':a' -e '$!N;s/\n/:/;ta' |
| cat -n | sed '=' | sed '$!N;s/\n/ /' |
| grep -n | sed -n '/patt/{=;p;}' | sed '$!N;s/\n/:/' |
| cp orig new | sed 'w new' orig |
| hostname -s | hostname | sed 's/\..*//' |
Оригинал примеров здесь
for i in *.txt; do sed -i "/^\^/ s/^\^\([^\^]*\)\^\^/====\1====/;/^=/ s/$/ \n^ Команда ^ Описание ^/" $i; done
Эта строка проходит в цикле по всем файлам в текущем каталоге, имена которых оканчиваются на .txt, и:
/^\^/ s/^\^\([^\^]*\)\^\^/====\1====/ – если строка начинается с "^", заменить "^ Текст ^^". на "==== Текст ====";/^=/ s/$/ \n^ Команда ^ Описание ^/ — если строка начинается на "=" (а она начинается, т.к. в предыдущем пункте мы сами это сделали, и здесь условие только для того, чтобы не трогать остальные строки), заменить эту строку на неё же, плюс возврат каретки, плюс "^ Команда ^ Описание ^". Другими словами, вставить после такой строки строку содержащую "^ Команда ^ Описание ^".Для чего это? Вот для чего. Я разбил длинный dokuwiki-файл с командами линукс на мелкие файлы. Они получились вида:
^ Анализ файловых систем ^^ | badblocks -v /dev/hda1 | проверить раздел hda1 на наличие bad-блоков | ...
Данная последовательность команд превратила их все в вид:
==== Анализ файловых систем ==== ^ Команда ^ Описание ^ | badblocks -v /dev/hda1 | проверить раздел hda1 на наличие bad-блоков | ...
Для удаления строки, содержащей определённый контекст, можно использовать следующую конструкцию:
sed -i "/^AUTO_SAVE/ d" notes.ini
Эта команда в файле notes.ini удаляет все строки, начинающиеся с AUTO_SAVE.
Для удаления строки или нескольких строк в файле я использую следующую конструкцию:
sed -i '2,1d' <file_name>
Эта команда в файле <file_name> удаляет вторую строку.
Или:
sed -i '5,10d' <file_name>
Эта команда в файле <file_name> удалит десять строк начиная с пятой (включая пятую).
Этот пример показывает, как можно объединить строки разделённые возвратом каретки:
cat /etc/hosts | sed ':a; /$/N; s/\n//; ta'
В верхний регистр:
echo Sed | sed 's/.*/\U&/'
SED
В нижний регистр:
echo Sed | sed 's/.*/\L&/'
sed
Для примера возьмём результат работы dig:
$ dig ya.ru
выдаст нам
; <<>> DiG 9.7.0-P1 <<>> ya.ru ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5252 ;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;ya.ru. IN A ;; ANSWER SECTION: ya.ru. 4194 IN A 87.250.251.3 ya.ru. 4194 IN A 93.158.134.3 ya.ru. 4194 IN A 213.180.204.3 ya.ru. 4194 IN A 77.88.21.3 ya.ru. 4194 IN A 87.250.250.3 ;; Query time: 0 msec ;; SERVER: 192.168.2.9#53(192.168.2.9) ;; WHEN: Wed Nov 10 14:33:37 2010 ;; MSG SIZE rcvd: 103
а выполнив:
dig ya.ru | sed '0,/ANSWER SECTION:/d; /^$/q'
получим
ya.ru. 4160 IN A 93.158.134.3 ya.ru. 4160 IN A 213.180.204.3 ya.ru. 4160 IN A 77.88.21.3 ya.ru. 4160 IN A 87.250.250.3 ya.ru. 4160 IN A 87.250.251.3
0,/ANSWER SECTION:/d - удаляет все строки потока с первой и до строки, в которой встречается "ANSWER SECTION:", включительно/^$/q - как только встречается пустая строка, прекратить дальнейшую обработку.