training-web.ruГлавнаяКатегорииО насКарта сайтаПоискТёмная тема

Категории

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

Создано: 25 октября 2017Автор: Егор Астапов5083 просмотраСложность: легкий

Покажу вам простой 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

Комментарии

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

Егор Астапов: 20 марта 2018 22:09:19
Привет basarga! Благодаря ключу -i происходит замена текста по условию. Сама замена текста происходит в текстовом документе. Написано было "В нашем случае поиск строк осуществляется по всему документу". Я немного изменю текст )

реклама