2015-02-02 2 views
0

У меня есть файл, который с именем tmp, который содержит 4 строки:Как удалить строку из файла в bash?

dirs 
f1 
f2 
f3 

Я хочу остаться с

командой
f1 
f2 
f3 

Что Баш помогает мне сделать это? (. Только Баш пожалуйста, не СЭД или AWK)

+0

Прочитайте строку за строкой и при необходимости исключите строку; в противном случае напишите во временный файл и, наконец, замените его исходным файлом. –

+0

Можете ли вы показать мне пример? @BlueMoon –

+2

OK. Нужно немного подробнее. Почему sed/awk исключены? В зависимости от того, что вы на самом деле пытаетесь исключить, зависит ли это от номера строки или содержимого строки? – Sobrique

ответ

2

Вы могли бы использовать:

grep -v "dirs" tmp 

-v аргумент grep сведет матч, то это исключает что-либо соответствия dirs из файла tmp

Или если вы хотите чистый bash решение:

while read -r line 
do 
    if ! [[ $line =~ "dirs" ]] 
    then 
    echo $line 
    fi 
done < tmp 
+0

Если 'sed' и' awk' запрещены, я не уверен, почему 'grep' будет в порядке? – Sobrique

+0

Зачем беспокоиться о регулярном выражении в соответствии со строкой? Кажется расточительным. – kojiro

+0

@kojiro чисто потому, что я эмулировал команду grep в bash – arco444

1

Один из многих способов является используя хвост:

tail -n 3 tmp 
+0

да, я подумал об этом, но я знаю, сколько строк у меня будет –

+0

Я привел один пример из 4 строк, но это может быть 5, но я могу сказать, что знаю, что строка, которую я не хочу всегда, будет первая строка –

+0

Да, это не оптимальное решение. Для статических небольших файлов это нормально ... – heldt

0

регулярное выражение с Grep: либо

Grep 'е' TMP> name_of_output_file

или

Grep '[^ "DIRS"]' tmp> name_of_output_file

Работа для меня

Смежные вопросы