Возникли проблемы с этим кодом. Это удаляет строки, соответствующие дате (в моем случае, 09/05/17), что хорошо. Но на его месте есть только пустые строки.
У кого-нибудь есть решение?
sed -i -e "s|$PrevDay.*$||" $DataFile2
Расширяя мой предыдущий комментарий в ответ.
sed -i -e "\|$PrevDay.*$|d" $DataFile2
Объяснение: Вы используете функцию, которая заменяет текст в каждой строке. Вы выбрали |
символ как разделитель, записывает выражение, которое будет удалено между первым и вторым разделителем, и выражение, которое будет вставлено между вторым и третьим разделителем. Таким образом, строка редактируется, но не удаляется.
Если вы хотите удалить строку, вы должны использовать другой синтаксис:
\|
определяет |
в качестве разделителя вместо значения по умолчанию /
$PrevDay.*$
- шаблон для поиска, где $PrevDay
- переменная из вашего bash-скрипта.
|
отмечает конец шаблона поиска
d
означает, что строка, соответствующая шаблону, должна быть удалена
Смотрите этот похожий вопрос на Stackoverflow.
Как обычно в UNIX-подобном wolrd, тот же результат может быть достигнут по-другому, например, с помощью awk
; следующее выражение означает: «если шаблоны не совпадают, выведите всю строку».
awk -i '!/$PrevDay.*$/ {print $0}' $DataFile2
Попробуйте: sed -i -e "s|$PrevDay.*$||" $DataFile2 | grep -v '^$'
Если ваша строка ввода не пуста, но содержит символы пробела, вы можете использовать
sed -i -e "s|$PrevDay.*$||" $DataFile2 | grep -v '^[[:blank:]]*$'