2010-08-24 2 views
1

Я пытаюсь удалить строку, содержащую определенный шаблон в текстовом файле. У меня есть следующий код, который не работаетУдаление текста с помощью grep

`grep -v "$varName" config.txt` 

может кто-нибудь сказать мне, как я могу заставить его работать правильно, я хочу, чтобы заставить его работать, используя Grep и не СЭД

+2

Участник в течение 5 месяцев. Нет голосов, ответов нет, задал 5 вопросов и не принял ответа ни в одном из них. @mrblibby, вы так называете leecher. –

+1

«который не работает» не очень помогает нам. Укажите конкретные сообщения об ошибках или конкретные способы, в которых результат отличается от ожидаемого. Используете ли вы обратные шаги как часть своей команды? Если это так, вот где ваша проблема. –

+0

Когда вы запускаете это, я уверен, что он просто выводит все строки файла минус любые, содержащие $ varName. Затем вам нужно будет направлять этот вывод в другой файл, а затем 'mv', чтобы этот файл возвращался к исходному имени файла. –

ответ

-1

попробовать использовать -ев

grep -Ev 'item0|item1|item2|item3' 

Это приведет к удалению строк, содержащих элемент [0-3]. дайте мне знать, если это поможет

+1

grep ничего не удаляет. Он либо печатает строки, которые соответствуют математике, либо линии, которые не совпадают. Вам нужно будет перенаправить вывод, чтобы сохранить распечатанное. –

+0

Чтобы уточнить, используемые выше флаги сообщают grep '-E' использовать расширенное выражение (в данном случае правильное) и' -v', которое превращает grep в «все, кроме ... этого материала». Этот метод можно было бы использовать здесь, но не так, как захотел OP. Вам нужно будет использовать эту команду, а затем перенаправить вывод обратно в файл. Однако вы не можете напрямую grep в тот же файл, поэтому вам придется grep> другой файл, а затем скопировать содержимое обратно. 'sed' - лучшее предложение. –

3

grep не изменяет файлы. Лучшее, что вы можете сделать, если вы настаиваете на использовании Grep и не СЭД является

grep -v "$varName" config.txt > $$ && mv $$ config.txt 

Обратите внимание, что я использую $$ в качестве имени временного файла, потому что это PID вашего Баш скрипт, и поэтому, вероятно, не имя файла будет использоваться другим скриптом bash. Я бы рекомендовал использовать $$ в именах temp-файлов в bash, особенно те, которые могут запускаться несколько раз одновременно.

+0

Еще лучше, используйте утилиту 'mktemp'. – zwol

2

вы можете использовать СЭД, с вместо -i

sed -i '/pattern/d' file 
Смежные вопросы