Я хотел бы просмотреть файл и удалить определенные последовательности между разделителями.

Например

 drw---- 00000000 11111111        0 ./a/
 drw---- 00000000 11111111        0 ./b/
 d------ 00000000 11111111        0 ./c/
 d------ 00000000 11111111        0 ./d/k/
 d------ 00000000 11111111        0 ./e/l/r/
 d------ 00000000 11111111        0 ./f/m/s/x/
 ------- 00000000 11111111       89 ./g/n/t/y/C.xml
 dr----- 00000000 11111111        0 ./h/o/u/z/
 dr-r--- 00000000 11111111        0 ./i/p/v/A/D/
 d--r--- 00000000 11111111        0 ./j/q/w/B/

Станет

 drw---- ./a/
 drw---- ./b/
 d------ ./c/
 d------ ./d/k/
 d------ ./e/l/r/
 d------ ./f/m/s/x/
 ------- ./g/n/t/y/C.xml
 dr----- ./h/o/u/z/
 dr-r--- ./i/p/v/A/D/
 d--r--- ./j/q/w/B/

Где начальный разделитель является вторым пробелом в файле, а конечный разделитель -./

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

3 ответа3

2

Самый простой способ сделать это - использовать awk .

$ awk '{print $1, $5}' myfile.txt

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

1

Вот регулярное выражение, которое вы хотите. Либо откройте файл в vim и запустите его, либо выполните sed the_expression oldname > newname .

:%s/[0-9][0-9]*//g

Объяснение:
Символ% указывает, что следующая команда должна выполняться для всего файла.
s означает search/for this expression/and replace it with this one/
В вашем случае вы хотите удалить все числа, поэтому мы просим механизм регулярных выражений vim искать каждое вхождение одного или нескольких чисел и заменять его ничем.

1

Msgstr "Где начальный разделитель является вторым пробелом в файле, а конечный разделитель - ./"

Вот уродливый только для вас

C:\sdf>type p.p
 drw---- 00000000 11111111        0 ./a/
 drw---- 00000000 11111111        0 ./b/
 d------ 00000000 11111111        0 ./c/
 d------ 00000000 11111111        0 ./d/k/
 d------ 00000000 11111111        0 ./e/l/r/
 d------ 00000000 11111111        0 ./f/m/s/x/
 ------- 00000000 11111111       89 ./g/n/t/y/C.xml
 dr----- 00000000 11111111        0 ./h/o/u/z/
 dr-r--- 00000000 11111111        0 ./i/p/v/A/D/
 d--r--- 00000000 11111111        0 ./j/q/w/B/
C:\sdf>sed -r "s/(\s+\S+\s*)([^.]*\.\/)/\1.\//" p.p
 drw---- ./a/
 drw---- ./b/
 d------ ./c/
 d------ ./d/k/
 d------ ./e/l/r/
 d------ ./f/m/s/x/
 ------- ./g/n/t/y/C.xml
 dr----- ./h/o/u/z/
 dr-r--- ./i/p/v/A/D/
 d--r--- ./j/q/w/B/
C:\sdf>

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