1 (25.03.2012 19:06:06 отредактировано Aleksey.Gilenkov)

Привет всем !
Я столкнулся с такой проблемой.
В общем я добавляю строку вот этой командой

echo "Моя строка" >> путь к файлу в котором добавить"

а какой командой эту строку удалить ?

2

sed -i "/Ваша строка/d" "путь к файлу в котором надо удалить"

3

verg пишет:

sed -i "/Ваша строка/d" "путь к файлу в котором надо удалить"

удалит все строки, в которых есть "Ваша строка". если нужно точное совпадение, то:
sed -i "/^Ваша строка$/d" "путь к файлу в котором надо удалить"
ну и вообще какой-нить учебник по сед в руки...

95% процентов проблем находятся между клавиатурой и стулом.

вот что я получил в ответ

sed: -e expression #1, char 17: extra characters after command

5

Aleksey.Gilenkov пишет:

sed: -e expression #1, char 17: extra characters after command

а строка мы угадывать должны?

Fat-Zer пишет:

sed -i '/^Ваша строка$/d' "путь к файлу в котором надо удалить"

// fixed

95% процентов проблем находятся между клавиатурой и стулом.
sed -i "/^linux addons/dproto/dproto_i386.so$/d" "home/cgss/service16/cs/cstrike/addons/metamod/plugins.ini"

7 (25.03.2012 19:27:26 отредактировано Fat-Zer)

очевидно же, что слеш - это спец. символ... их надо экранировать. ну и по поводу кавычек уже написал фикс...
sed -i '/^linux addons\/dproto\/dproto_i386.so$/d' "home/cgss/service16/cs/cstrike/addons/metamod/plugins.ini"

95% процентов проблем находятся между клавиатурой и стулом.
Fat-Zer пишет:

очевидно же, что слеш - это спец. символ... их надо экранировать. ну и по поводу кавычек уже написал фикс...
sed -i '/^linux addons\/dproto\/dproto_i386.so$/d' "home/cgss/service16/cs/cstrike/addons/metamod/plugins.ini"

спасибо

9

sed -i /linux addons/dproto/dproto_i386.so/d  /home/cgss/service16/cs/cstrike/addons/metamod/plugins.ini

а вот так не надо... - удалит все строки, в которых есть одно из linux addons proto proto_i386.so... хорошо только, что точек с запятой не хватает... и кавычек...

95% процентов проблем находятся между клавиатурой и стулом.

А как сделать замену строк одна на другую по такому же принципу ?

11

Aleksey.Gilenkov пишет:

А как сделать замену строк одна на другую по такому же принципу ?

sed -e 's/что заменить/на что/' -i "файл"

ЗЫ: неплохой учебник: http://drbatty.ru/sed/index.html

95% процентов проблем находятся между клавиатурой и стулом.

спасибо ))))

13

Fat-Zer пишет:

а вот так не надо..

дык надо sed -i*.bak 's/xxx/yyy/' file.txt
И если в file.txt окажется не то, то останется старый файл, переименованный в file.txt.bak

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

14 (12.12.2012 16:09:34 отредактировано Vikonder)

Камрады!

Чтобы не флудить в отдельной теме...

Linux CLI

Есть 500 текстовых файлов по 500 рекордов к каждом.
Проблема, что к конце каждого есть лишняя пустая строчка

Как удалить эту пустую строчку в этих 500 файлах в цикле, а заодно и все лишние пробелы.

спасибо

UPD Заодно, как можно с цикле создать 1000 файлов со следющими записями

file1:
user1,81901111XXXX
....
user1000,81901111YYYY

file2:
user1001,81902222XXXX
....
user2000,81902222YYYY

и т.д.

81902222YYYY - подразумевает целое число длины 8, с префикксом 8190

15

Vikonder пишет:

Как удалить эту пустую строчку в этих 500 файлах в цикле, а заодно и все лишние пробелы.

Если под «лишним пробелом» подразумевается замена произвольного количества пробелов и отступов одним пробелом, то

find . -name '*.txt' -exec sed -i'' -e 's/[[:blank:]]\+/\ /g' -e '$d' "{}" \;

Команда ищет в текущем каталоге и во всех вложенных текстовые файлы (точнее, файлы с .txt расширением), заменяет произвольное количество пробелов и отступов одним, удаляет последнюю строку (даже если она не пустая!). Копии файлов не создаются!

Команда строго не тестировалась, так что перед использованием обязательный бэкап критически важных данных!

Был, был и весь вышел...

16

Подскажите!  есть сотня файлов.  как у всех удалить первую строку?? ab

17

Первое, что в голову взбрело:

lupo@gentoo-laptop test % cat test1.txt
1
2
3
lupo@gentoo-laptop test % cat test2.txt
11
22
33
lupo@gentoo-laptop test % cat test3.txt
111
222
333
lupo@gentoo-laptop test % for i in *.txt; do sed -i '1d' ${i}; done
lupo@gentoo-laptop test % cat test1.txt
2
3
lupo@gentoo-laptop test % cat test2.txt
22
33
lupo@gentoo-laptop test % cat test3.txt
222
333

...наверняка, можно и красивее сделать

Был, был и весь вышел...