2017-02-08 18 views
2

У меня есть текстовый файл, как это:Баша/СЭД/AWK Удалить или GSUB шаблон метки времени из текстового файла

1/7/2017 12:53 DROP TABLE table1             
1/7/2017 12:53 SELECT 

1/7/2017 12:55 --UPDATE #dat_recency SET 
Select * from table 2 
into table 3; 

я хотел бы, чтобы удалить все шаблоны временных меток (M/D/YYYY HH:MM, M/DD/YYYY HH:MM, MM/D/YYYY HH:MM, MM/DD/YYYY HH:MM). Я могу найти шаблоны, используя grep, но не могу понять, как использовать gsub. Какие-либо предложения?

DESIRED ВЫВОД:

DROP TABLE table1             
SELECT 

--UPDATE #dat_recency SET 
Select * from table 2 
into table 3; 
+0

нет Perl. в окне окна я фактически использую редактор bash, который поставляется с git. – screechOwl

ответ

3

Вы можете использовать эту sed команду, чтобы удалить данные/метки времени от начала линии: доступны

sed -i.bak -E 's~([0-9]{1,2}/){2}[0-9]{4} [0-9]{2}:[0-9]{2} *~~' file 

cat file 

DROP TABLE table1 
SELECT 

--UPDATE #dat_recency SET 
Select * from table 2 
into table 3; 
+0

Возможно, короче 'sed -E 's ~ ([0-9] {1,2} /) {2} [0-9] {4} [0- 9] {2}: [0-9] {2} * ~~ '' – SLePort

+1

Да, это будет более кратким – anubhava

2

Используйте пространство разделитель по умолчанию, сделайте первый и второй столбцы в пустую строку, а затем распечатать всю линию.

awk '/^[0-9]/{$1=$2="";gsub(/^[ \t]+|[ \t]+$/, "")} !/^[0-9]/{print}' sample.csv 

команда проверяет каждую строку ли начинается с числовой или нет, если заменить первые 2 столбца с пустыми строками и удалить начальные пробелы; в противном случае напечатать оригинальную строку.

выход:

DROP TABLE table1 
SELECT 

--UPDATE #dat_recency SET 
Select * from table 2 
into table 3; 
+1

Это не обеспечивает желаемый выход OP. Он оставляет ведущие пробелы, и он clobbers 'Select' и 'in' на последних двух строках. –

+0

@Jordan благодарит за комментарий. ОП изменил свой вопрос, запроса не было. Я обновил свой ответ на последний вопрос. – haifzhan

+0

Выглядит неплохо. (Для записи, downvote не был моим.) –