Сегодня существуют компании (Red Hat, SUSE/Novell, Канонический), кто готов оказать Вам поддержку и гарантировать, что это не повредится. Люди Enterprisey (кому время простоя часа может легко стоить буквально тысячи долларов) с удовольствием платят для сна обоснованно, зная, что они могут свалить вину в другом месте, когда sh*t поражает вентилятор. BSDs не предлагают ничего как этот. Несомненно, Вы найдете FreeBSD, OpenBSD, NetBSD, Fedora, Debian, CentOS и длинный список других операционных систем "непредприятия" в использовании предприятия, но редко с официальным благословением от PHB или его генерального директора.
sed '/NOTOK/ { N; s/\n// }'
Если Ваша sed реализация не поддерживает ;
для разделения команд (GNU sed делает, но это не стандартно):
sed -e '/^NOTOK/ {' -e 'N' -e 's/\n//' -e '}'
Sed становится загадочным очень быстро; что-либо это более сложно, чем один или несколько s
команды являются хорошим кандидатом на awk.
awk '/^NOTOK/ {printf "%s", $0; next} 1 {print}'
или
awk '/NOTOK/ {getline n; $0 = $0 n} 1'
Присоединение к строкам с ed
:
cat <<-'EOF' | ed -s file
H
$a
.
,g/^[[:space:]]*NOTOK/.,.+1j
,p
q
EOF
(Примечание: использовать w
вместо ,p
для оперативного редактирования файла.)
Вот некоторые:
Perl
perl -pe 'chomp if /^\s*NOTOK/' file
-p
флаг жемчуга заставляет это печатать каждую строку входного файла, -n
средства читают строки файлов с методической точностью и применяют сценарий, данный -e
. chomp()
функция, которая просто удаляет новую строку (\n
) от конца строки, таким образом, мы чавкаем, только если строка начинается с NOTOK (/^NOTOK/
).
awk
awk '{if($1~/NOTOK/){printf "%s", $0}else{print}}' file
или
awk '$1~/NOTOK/{printf "%s", $0; next}1;' file
$1
первое поле в awk
. Если это соответствует NOTOK
мы печатаем строку без новой строки в конце (printf
) иначе мы печатаем строку, как.
удар
while IFS="" read line; do
if [ $(expr index "$line" "NOTOK") -gt "0" ]; then printf "$line";
else echo "$line"; fi;
done < file
IFS
разделитель поля ввода, который должен быть установлен очистить для чтения целых строк (иначе, это получило бы только первое слово). Так, мы читаем каждую строку файла в $line
, затем проверьте, начинается ли та строка NOTOK
и печать, если без новой строки в конце (printf) или с (эхом) соответственно.
printf "%s", $0
- нет никакого способа знать то, что будет в 0$, включая возможный printf % - директивы.
– glenn jackman
01.01.2014, 19:22
print
луг явно. Между прочим, у Вас есть более чем достаточно представителя для редактирования, не стесняйтесь просто удалять его, если я делаю что-то глупое как этот снова.
– terdon♦
16.05.2014, 19:40
1 {print}
– glenn jackman 01.01.2014, 17:26NOTOK
с тех пор нет никакой гарантии, что строка будет всегда сопровождатьсяFS
. – terdon♦ 01.01.2014, 19:26