Я пытаюсь удалить все вхождения слова в текстовом файле с помощью sed. У меня есть этот файл f1:

Альма Фа
alatt
Ньяри Пирос Альма

и я хотел бы удалить все случаи "Альма". Я использую следующее в сценарии .sh:

a=`sed "s/alma//g" $ file`; 
echo -e $a | cat > $file

где $file содержит имя этого текстового файла, который я только что написал. Проблема в том, что sed не учитывает перевод строки, и мой новый файл f1 выглядит так:

fa alatt nyari piros.

Таким образом, все написано в одной строке, однако, я хотел бы сохранить исходную форму f1 с отдельными строками.
Как я мог это сделать?

2 ответа2

3

С помощью GNU sed вы можете достичь этого с помощью одной команды:

sed -i "s/alma//g" f1

-i редактирует файл на месте.

Для BSD sed , например, в OS X, параметры разные: вам нужен sed -i '' 's/alma//g' f1 .

0

Вы пропустили цитаты.

a=$(sed "s/alma//g" $file);
printf %b "$a" > $file

Вы всегда должны использовать кавычки вокруг расширения параметров, если вы не знаете, что делаете.

Тем не менее, я думаю, что однострочник Parkydr является более читабельным.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .