LinuxForum.Fans
Тема

Удаление строки из файла

Автор: Aleksey_Gilenkov 17 сообщений 16440 просмотров
#240574

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

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

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

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

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

#240585

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

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

#240586
"Aleksey.Gilenkov" написал:
sed: -e expression #1, char 17: extra characters after command

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

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

// fixed

#240587
text
sed -i "/^linux addons/dproto/dproto_i386.so$/d" "home/cgss/service16/cs/cstrike/addons/metamod/plugins.ini"
#240588

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

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

спасибо

#240590

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

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

#240631

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

#240633
"Aleksey.Gilenkov" написал:
А как сделать замену строк одна на другую по такому же принципу ?

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

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

#240853
"Fat-Zer" написал:
а вот так не надо..

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

#290131

Камрады!

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

Linux CLI

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

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

спасибо

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

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

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

и т.д.

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

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

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

text

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

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

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

#326386

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

#326397

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

text

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

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

Войдите или зарегистрируйтесь, чтобы ответить.