голосование
BASH
PHP
Javascript
HTML
Программы
Firebird
Майнинг
PostgreSQL
Хостинг
Железо
Ресурсы
GIT
SEO
Oracle
Python
Мобильные технологии
Ремонт
Mercurial
Заработок на сайте
Docker
Проголосуйте за категорию!
счётчик
Яндекс.Метрика

Как заменить текст в файле при помощи sed BASH

Покажу вам простой sh срипт для замены текста в файле. Ваша задача создать текстовой документ и расположить в нём маркеры, которые будут заменены на ваши слова. Нам поможет команда sed с ключом -i. Ключ -i означает замену строк в текстовом документе. Посмотрите на пример. Сначала мы объявляем переменные, потом происходит копирование файла. Далее происходит замена строк (маркеров). В конце выводим два файла. В оригинальном файле seg_test.txt наши не тронутые маркеры, а в файле seg_test2.txt результат замены строк. Вы можете заменить как одну строку, так и несколько строк. В нашем случае поиск строк осуществляется по всему документу.


#!/bin/bash

file1='seg_test.txt'
file2='seg_test2.txt'
hostname1='yandex'
hostname2='google'
hostname3='rambler'
hostname4='mail'

cp ./$file1 ./$file2

sed -i "s/#1#/наша замена: $hostname1/" ./$file2
sed -i "s/#2#/наша замена: $hostname2/" ./$file2
sed -i "s/#3#/наша замена: $hostname3/" ./$file2
sed -i "s/#4#/наша замена: $hostname4/" ./$file2

echo "до замены $file1:"
cat ./$file1
echo ""
echo ""

echo "после замены $file2:"
cat ./$file2
echo ""

#вывод:
#до замены seg_test.txt:
#1#
#2#
#3#
#4#
#
#после замены seg_test2.txt:
#наша замена: yandex
#наша замена: google
#наша замена: rambler
#наша замена: mail

Очистка csv-файлов от символов ;

Допустим вы парсите файл csv и у вас уйма строк с непонятными символами ;;. Для очистки всего файла используйте условие "/;;/ d". Посмотрите на пример.


#удаление строк с символами ;;
sed -i "/;;/ d" ./file.csv

Посмотрите на этот пример. Тут удаляются строки у которых количество символов ; больше одного. Если при экспорте эксельного файла в csv возникли пустые строки с символом ; , то срезайте их. Вся сложность в том, что количество символов ;..; в пустой строке может быть любым. Для этого случая используйте выражение '/^[;]\{1\}.*$/d'.


#пример файла csv
column1;column2;column3;;;;
Egor;Python;programmer;;;;
Ivan;PHP;programmer;;;;
;;;;
;;;;
;;;;

#удаление строк с символом ;
#ищем ;
sed -i "/^[;]\{1\}.*$/ d" ./file.csv

#ищем символы не похожие на строки(a-z) и числа(0-9), 
#кириллические символы игнорируются
sed -i "/^[^:alnum:]\{1\}.*$/ d" ./file.csv

#тут учитываются кириллические символы
sed -i "/^;*\t*.$/d" ./file.csv

Вы можете перед парсингом любого текстового документа очистить его от пустых строк. Для этого воспользуйтесь условием /^$/.


#удаление лишних символов
sed -i "/^$/d" ./file.csv
просмотры: 3792, уровень: лёгкий уровень, рейтинг: 1, дата: 2017-10-25 15:46:07
проголосовать:

Комментарии:

добавил(а): basarga
дата: 2018-03-20 18:23:53
Руководствуясь этим текстом, я убил на простой скрипт полтора часа времени. Ключ -i НЕ ОЗНАЧАЕТ ЗАМЕНУ СТРОК! Этот ключ указывает на то, что замена будет происходить в файле. Автору следует тестировать свои предположения, прежде чем излагать их в утвердительной форме.
добавил(а): Егор Астапов
дата: 2018-03-20 22:09:19
Привет basarga! Благодаря ключу -i происходит замена текста по условию. Сама замена текста происходит в текстовом документе. Написано было "В нашем случае поиск строк осуществляется по всему документу". Я немного изменю текст )





поиск
реклама
банеры
Мы предлагаем в аренду VPS серверы с выделенным IP-адресом, которые полностью эмулируют физический сервер.
http://trainingweb.ru/redirect/well_web_vps_kvm Аренда VPS KVM в Европе Мы предлагаем в аренду VPS серверы с выделенным IP-адресом, которые полностью эмулируют физический сервер.
http://trainingweb.ru/redirect/pingadmin мониторинг сайтов сервис мониторинга работы сайта, мониторим HTTP, HTTPS, FTP, MYSQL, PostgreSQL, POP3, SMTP, IMAP
http://trainingweb.ru/redirect/domains домен RU домен RU всего за 99 рублей