Ошибка: hd1, gpt2 не найден

printf %s\\n 'A B C' '1 2 3 4'|
sed -e's/\([^ ]*\)  *[^ ]*/&\n\1/;//P;D'

A B
A C
1 2
1 3
1 4

Это работает. Он выбирает первые две последовательности из нуля или нескольких непробельных символов, разделенных одним или несколькими пробелами. Первая такая последовательность указана в \ 1 , а весь выбор - в и . Выделение заменяется на себя, за которым следует \ n ewline, затем \ 1 . Затем пространство шаблонов печатается до первой встречающейся новой строки, а затем эта же часть D удаляется перед тем, как пространство шаблонов повторно используется в верхней части скрипта с тем, что остается.

Вы можете увидеть, что он делает, с помощью команды l ook. Замените P w / l и поместите другой l перед s /// ubstitution ...


A B C$
A B\nA C$
A C$
A C\nA$
A$
1 2 3 4$
1 2\n1 3 4$
1 3 4$
1 3\n1 4$
1 4$
1 4\n1$
1$

printf %s\\n 'A B C' '1 2 3 4'|
sed -ne:t -e'/  *[^ ]*/{s//\n&/2;P;s///;} -ett

A B
A C
1 2
1 3
1 4

Он соответствует пробел с хотя бы одной последовательностью пробелов и любыми конечными непробелями. Первая подстановка вставляет новую строку перед вторым появлением такой последовательности, затем P ринт до новой строки, а вторая подстановка удаляет первое вхождение этого шаблона - который также теперь будет включать новую строку в первую один добавляется к концу этой последовательности при работе со вторым. t est разветвляется обратно на метку : t каждый раз, когда происходит подстановка, и поэтому sed съедает пространство шаблонов разделенное пробелом поле за раз.

С l ОК снова:


A B C$
A B\n C$
A C$
A C$
1 2 3 4$
1 2\n 3 4$
1 3 4$
1 3\n 4$
1 4$
1 4$
1
20.12.2018, 22:50
1 ответ

От мужчина:

-c, --count

Подавление нормального вывода; вместо этого выведите количество совпадающих строк для каждого входного файла.

0
28.01.2020, 00:26

Теги

Похожие вопросы