Давайте начнем с примера, с которым я недавно столкнулся:
C:\>net user
User accounts for \\SOMESYSTEM
-------------------------------------------------------------------------------
ASPNET user1 AnotherUser123
Guest IUSR_SOMESYSTEM IWAM_SOMESYSTEM
SUPPORT_12345678 test userrrrrrrrrrrr test_userrrrrrrrrrrr
The command completed successfully.
В третьем ряду второго столбца есть логин с пробелом.Это приводит к тому, что многие инструменты, которые разделяют поля на основе пробелов, рассматривают это поле как два поля.
Как бы вы поступили с данными, отформатированными таким образом с использованием современных инструментов?
Вот пример на чистом ** пакетном языке Windows в командной строке, который я хотел бы воспроизвести в других современных кроссплатформенных наборах инструментов для обработки текста:
C:\>cmd /v:on
Microsoft Windows [Version 5.2.3790]
(C) Copyright 1985-2003 Microsoft Corp.
C:\>echo off
for /f "skip=4 tokens=*" %g in ('net user ^| findstr /v /c:"The command completed successfully."') do (
More? set record=%g
More? echo !record:~0,20!
More? echo !record:~25,20!
More? echo !record:~50,20!
More? )
ASPNET
user1
AnotherUser123
Guest
IUSR_SOMESYSTEM
IWAM_SOMESYSTEM
SUPPORT_12345678
test userrrrrrrrrrrr
test_userrrrrrrrrrrr
echo on
C:\>
** Использование расширения с переменной задержкой(cmd / v: on или setlocal enabledelayedexpansion в пакетном файле), синтаксический анализатор вывода команды for / f и синтаксис переменной-подстроки ... ничего из этого хорошо документировано, за исключением замечательного веб-сайта http://ss64.com/nt/syntax.html
Заглядывая в AWK, я не видел способа справиться с полем входа 'test userrrrrrrrrrrr' без использования substr () в методе, аналогичном синтаксису подстроки переменных выше.Есть ли другой язык, который облегчает обработку текста и не предназначен только для записи, как sed?