2016-11-07 2 views
0

Мне нужно импортировать некоторые данные из печатных отчетов в форму, которая может быть использована для перехода на другую систему. Кажется, я застрял в одном маленьком шаблоне: я пытаюсь удалить строки, содержащие строку .00, начиная с столбца 128 в отчете, вместе со следующей строкой.Соответствие sed в определенном столбце в текстовом файле?

Я использую следующие: sed '/^\{128\}\.00/,+1 d'inputfile >outputfile

Я использую FreeBSD, и я получаю сообщение об ошибке RE: повторение-оператор операнда недействительный. Я получаю ту же ошибку, если я экспериментирую, удалив +1, чтобы удалить следующую строку, поэтому я предполагаю, что мне не хватает чего-то более элементарного.

(Я уверен, что кто-то скачет и скажет: «Вы должны использовать awk, как это ...», но у меня есть конкретные причины для этого, используя sed. И, к сожалению, это было 30+ лет с тех пор, как я был мастером sed/awk, и я так же ржав на обоих из них. 8-))

Благодарим за помощь.

Это пример две строки текста я пытаюсь соответствовать:

1011-000          .00     .00    .00    .00     .00 
Petty Cash-Shop 

Обратите внимание, что, несмотря на линии обертывания здесь, последний столбец +0,00. Я получил номера столбцов от экспериментов в vim. Я ожидаю, что обе эти строки исчезнут после выполнения команды sed.

Я сменил команду на sed '/\.\{128\}\.00/,+1 d'inputfile >outputfile, и они не исчезли. («». Но спасибо поймать, что это было необходимо, я больше не получаю сообщение об ошибке RE.)

+0

Ваш квант '{128}' изменяет '^', что не имеет смысла. Используйте '. {128}' вместо (или правильно escaped '. \ {128 \}') – Aaron

+1

Нет ничего перед '\ {128 \}', что вам нужно 128 из? – 123

+1

Что разделяет «столбцы»? Пробелы, запятые, вкладки, что-то еще? Или вы имеете в виду «положение персонажа»? Независимо от того, почему вы хотите использовать sed, это плохо, если только клавиши «a», «w» и «k» не сломаны на вашей клавиатуре. sed - это простые подстановки на отдельных строках, то есть все. Вы не делаете этого, так что это не работа для sed, это работа для awk, так как ваш компьютер в настоящее время говорит вам, демонстрируя не переносимую природу использования sed для чего-то подобного. –

ответ

0

Попробуйте это:

sed '/^.\{127\}\.00/{N;d;}' inputfile > outputfile 

Если следующая строка после 127-го символа является .00, затем добавьте следующую строку пространство рисунка с помощью команды N и удаляет ее с помощью d.

+0

Это дало мне ошибку: «дополнительные символы в конце команды d». Однако я могу столкнуться с проблемой из-за различий между BSD sed и Linux/GNU sed. Спасибо за помощь. –

+0

Добавлена ​​'' 'после команды' d'. Дайте мне знать, если это сработает. – SLePort

+0

Ha! Работали красиво! Я благодарю тебя! –

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