#sed
#sed
Вопрос:
У меня есть файл, который содержит даты в mm/dd/yyyy
формате, но по всему файлу также есть случайные «/», которые необходимо удалить, которые являются отдельными и ни с чем не связаны. Я пробовал sed 's/[/]//g' file.txt
, но это удаляет косые черты в дате, создавая mmddyyyy
даты, которые нельзя прочитать позже в программе. Я ищу способ удалить случайные косые черты, но сохранить те, которые содержатся в датах.
Файл выглядит следующим образом
Date Time
05/23/2010 12:30
05/23/2010 1:30
/
05/24/2010 1:30
И я хочу, чтобы это было
Date** Time
05/23/2010 12:30
05/23/2010 1:30
05/24/2010 1:30
Комментарии:
1. Пожалуйста, покажите надлежащий тестируемый образец с соответствующим ожидаемым результатом, не публикуйте их в виде комментариев или изображений.
2. Вы имеете в виду, что хотите удалить целые строки, которые содержат только a
/
? Нравитсяsed '/^/$/d' file > newfile
?
Ответ №1:
Использовать awk
его намного проще:
awk 'NR == 1 || $1 ~ /^([0-9]{2}/){2}[0-9]{4}$/' file | column -t
Date Time
05/23/2010 12:30
05/23/2010 1:30
05/24/2010 1:30
Здесь:
NR == 1
: Возвращает true, если это первая запись||
: ИЛИ$1 ~ /^([0-9]{2}/){2}[0-9]{4}$/
: Если первый столбец соответствует заданному формату даты- используйте действие по умолчанию для печати совпадающих записей
Ответ №2:
Вы можете удалить все строки, которые содержат только /
из файла, используя
sed '/^/$/d' file > newfile
Или, если могут быть начальные / конечные пробелы, '/^[[:blank:]]*/[[:blank:]]*$/d'
.
Смотрите онлайн sed
-демонстрацию:
s='05/23/2010 12:30
05/23/2010 1:30
/
05/24/2010 1:30'
sed '/^[[:space:]]*/[[:space:]]*$/d' <<< "$s"
Вывод:
05/23/2010 12:30
05/23/2010 1:30
05/24/2010 1:30
Ответ №3:
$ sed -nE '1p;s/.*([0-9]{2}/[0-9]{2}/[0-9]{4} *[0-9]{1,2}:[0-9]{2}).*/1/p' file
Вывод:
Date Time
05/23/2010 12:30
05/23/2010 1:30
05/24/2010 1:30