LINUX.ORG.RU

Помогите с grep awk и с роботой с файлом!!!


0

0

Имеется файл
Где-то в середине имеется строка с известной подстрокой - гарантированно единственной!
Как заменить эту СТРОКУ на другую, хранящуюся например в переменной???

Возможно grep awk Но я не знаю опций наверное!!!
anonymous

awk -v to=replacement -- '/pattern/ {print to;next} {print $0}' <input_file >output_file

watashiwa_daredeska ★★★★
()

В general один чувак про ghost спрашивал. Вот прочти что про него no-dashi думал, я про тебя тоже самое думаю. Ну элементарная же вешь. man sed до просвтеления. Блин.
$echo 11>foo
$echo 12>>foo
$echo 21>>foo
$echo 14>>foo
$cat foo
11
12
121
21
14
$new_string=44
$old_string=12
$cat foo|sed s/^$old_string$/$new_string/ >bar
$cat bar
11
44
121
21
14
14

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

> 1) Пользуем s###;

Те же яйца, вид сбоку. Хотя "#" не так часто в строках в скриптах встречается. Кроме того, есть ещё хитрый символ "\". В общем, там много исключений. Но если известно, что все строки всегда будут без этих исключений, то лучше sed - короче и быстрее.

Но твой вариант заменит только подстроку, а в описании - заменить всю строку, содержащую подстроку:

sed -e 's/^.*substr.*$/'"$x"'/'

> 2) Эскеипим в x служебные символы.

Это длинно и муторно, кроме того, не очень быстро. В общем, лучше уж awk.

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

В общем ты прав, но для однострочных скриптов это все ,как правило, правится на месте.

Кстати, не подскажешь, как в awk определить последнюю строку? Пару раз была такая задача, приходилось вывод awk sed'ом фильтровать.

anonymous
()
Ответ на: комментарий от anonymous

> как в awk определить последнюю строку?

Никак, насколько я знаю. Но можно сохранять строку в переменной, а потом обработать в правиле END:

awk '{s=$0} END {print s}' - эквивалент tail -1

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

последнюю строку так можно определить: сказать cat file, потом командой tac перевернуть файл и далее что то типа этого: awk 'NF!=0'|head -n 1

А вообще про последние строки см: http://groups.google.ru/groups?hl=ru&lr=&ie=UTF-8&group=comp.lang...

там вобщем в поиске либо last line либо first line, вообще там много ценных советов.

vilfred ☆☆
()
Ответ на: комментарий от vilfred

Ну, способов извратиться куча.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.