1

Возникли проблемы с этим кодом. Это удаляет строки, соответствующие дате (в моем случае, 09/05/17), что хорошо. Но на его месте есть только пустые строки.

У кого-нибудь есть решение?

sed -i -e "s|$PrevDay.*$||" $DataFile2

2 ответа2

0

Расширяя мой предыдущий комментарий в ответ.

sed -i -e "\|$PrevDay.*$|d" $DataFile2

Объяснение: Вы используете функцию, которая заменяет текст в каждой строке. Вы выбрали | символ как разделитель, записывает выражение, которое будет удалено между первым и вторым разделителем, и выражение, которое будет вставлено между вторым и третьим разделителем. Таким образом, строка редактируется, но не удаляется.

Если вы хотите удалить строку, вы должны использовать другой синтаксис:

\| определяет | в качестве разделителя вместо значения по умолчанию /

$PrevDay.*$ - шаблон для поиска, где $PrevDay - переменная из вашего bash-скрипта.

| отмечает конец шаблона поиска

d означает, что строка, соответствующая шаблону, должна быть удалена

Смотрите этот похожий вопрос на Stackoverflow.

Как обычно в UNIX-подобном wolrd, тот же результат может быть достигнут по-другому, например, с помощью awk ; следующее выражение означает: «если шаблоны не совпадают, выведите всю строку».

awk -i '!/$PrevDay.*$/ {print $0}' $DataFile2
-1

Попробуйте: sed -i -e "s|$PrevDay.*$||" $DataFile2 | grep -v '^$'

Если ваша строка ввода не пуста, но содержит символы пробела, вы можете использовать

sed -i -e "s|$PrevDay.*$||" $DataFile2 | grep -v '^[[:blank:]]*$'

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