LINUX.ORG.RU
решено ФорумAdmin

sed, awk и все-все--все: вставить строку.

 , ,


0

1

Подскажите, как поэлегантнее добавить строку в первую незакомментированную (начинающуюся не с #) строку скрипта (то есть сразу после шапки из комментариев).

Deleted

Последнее исправление: Deleted (всего исправлений: 1)

Ответ на: комментарий от blexey

sed '/^[^#]/ s/^/NewString\n/'

Это добавит после каждой.

cat test.txt | awk '/^[^#]/{f++}{if(f==1){print"str"; f++} print $0}'

А вот это вроде то что нужно. Спасибо.

Deleted
()
Ответ на: комментарий от blexey
cat test.txt | awk '/^[^#]/{if(f=!f) print "str"} 1'
anonymous
()
Ответ на: комментарий от Deleted

Это добавит после каждой.

Почему после каждой? На конце g не стоит, значит на первое совпадение только отработает, если я правильно понимаю.

yoghurt ★★★★★
()
Ответ на: комментарий от blexey

Есть мнение, что кошернее прибегнуть к перенаправлению, поскольку cat - отдельная программа, которая потребляет ресурсы:

awk <test.txt '/^[^#]/{f++}{if(f==1){print"str"; f++} print $0}'
Bagrov ★★★★★
()
Ответ на: комментарий от yoghurt

первое совпадение только отработает

Первое совпадение внутри s///. А снаружи строки матчатся все, удовлетворяющие /^[^#]/, а не первая попавшаяся.

thriller ★★
()
Ответ на: комментарий от ziemin

sed '/^[^#]/ s/^/NewString\n/'

Если немного модифицировать, то будет почти торт:

sed '1,/^[^#]/ s/^[^#]/NewString /'

Беда в том, что заменена будет первая /не пустая/ строка. Но дальше автору помогут маны. Например, можно не заменять (s), а добавлять (i) строки.

baka-kun ★★★★★
()
13 января 2015 г.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.